*
* PURPOSE:
*
-* PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS
+* PROVIDE DRAWING AND COORDINATE TRANSFORMATION
+* ROUTINES FOR INCREMENTAL PLOTTERS
*
*
* STORAGE:
*
*
SUBR PL$MV,MOVE
+ SUBR PL$MVR,MVR
SUBR PL$RST,RST
SUBR PL$LN,LINE
SUBR PL$RMR,RMR
- SUBR PL$X,X
- SUBR PL$Y,Y
- SUBR PL$MAT,MTRX
+ SUBR PL$X,UX
+ SUBR PL$Y,UY
+ SUBR PL$MAT,ATRA
SUBR PL$SCL,SCLE
+ SUBR PL$SCI,SCLI
SUBR PL$ROT,ROT
- SUBR PL$IDN,IDEN
+ SUBR PL$ROI,ROTI
+ SUBR PL$PUS,PUSH
+ SUBR PL$POP,POP
+ SUBR PL$INI,INIT
*
*
*
REL THIS IS A RELOCATABLE OBJECT
ORG '0
*
+*
********************************************************************************
+*
+**** PL$MVR - MOVE PEN RELATIVELY
+*
+MVR DAC **
+*
+ LDA* MVR
+ STA TMPX
+ IRS MVR
+ LDA* MVR
+ STA TMPY
+ IRS MVR
+*
+ LDA* TMPX
+* CALL OCT
+ ADD XU
+ STA XU
+*
+ LDA* TMPY
+* CALL OCT
+ ADD YU
+ STA YU
+*
+ IRS RELA SET FLAG
+ NOP
+ IRS MVR
+ JMP* MVR RETURN
+*
+*
+*
+**** PL$INI - GRAPHICS INITIALISATION
+*
+* THIS ROUTINE SETS THE HARDWARE ORIGIN TO THE CURRENT PlOTTER POSITION.
+* IT ALSO INITIALISES THE TRANSFORMATION.
+*
+****************************************
+*
+INIT DAC **
+ CRA
+ STA XU
+ STA YU
+ STA X
+ STA Y
+ STA RELA
+ CALL T$INIT
+ DAC ATRA
+ JMP* INIT
+*
+*
+**** PL$PUS - PUSH GRAPHIC CONTEXT ONTO THE STACK
+*
+PUSH DAC ** ENTRY
+ LDA* PUSH
+ STA SD1
+ IRS PUSH
+ CALL S$PUSM PUSH MEMORY ROUTINE
+SD1 DAC **
+ DAC ATRA
+ DEC 12 12 WORDS OF DATA.
+ JMP* PUSH
+*
+*
+********************************************************************************
+*
+*
+**** PL$POP - POP GRAPHIC CONTEXT FROM THE STACK
+*
+POP DAC ** ENTRY
+ LDA* POP
+ STA SD2
+ IRS POP
+ CALL S$POPM POP MEMORY ROUTINE
+SD2 DAC **
+ DAC ATRA
+ DEC 12 12 WORDS OF DATA.
+ JMP* POP
+*
+*
+* *******************************************************************************
*
-LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT
+*
+**** PL$LN - DRAW A LINE
+*
+LINE DAC 0 DRAW A LINE FROM NEAREST STARTING POINT
LDA* LINE X1
- STA X1
- LDA* X1
- STA X1
+ STA X1P
IRS LINE
- LDA* LINE Y1
- STA Y1
- LDA* Y1
- STA Y1
+ LDA* LINE Y1
+ STA Y1P
IRS LINE
LDA* LINE X2
- STA X2
- LDA* X2
- STA X2
+ STA X2P
IRS LINE
LDA* LINE Y2
- STA Y2
- LDA* Y2
- STA Y2
+ STA Y2P
IRS LINE TALLY RETURN ADDRESS
IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
-*
-*
- CALL M$APLI
- DAC MTRX
+*
+ CALL T$APII APPLY MATRIX
+ DAC ATRA
DAC X1
+ DAC Y1
+X1P DAC **
+Y1P DAC **
DAC 0
-*
- CALL M$APLI
- DAC MTRX
+*
+ CALL T$APII APPLY MATRIX
+ DAC ATRA
DAC X2
+ DAC Y2
+X2P DAC **
+Y2P DAC **
DAC 0
-*
*
*
LDA X
JST RMOV REAL MOVE
JMP* LINE END OF THE LINE :-)
*
-*
-*
+*
********************************************************************************
*
-**** MOVE PEN ROUTINE
+**** MAKE CURRENT X AND Y THE ORIGIN
*
-RST DAC ** SET POINT ZERO
+RST DAC **
+*
+**** FIRST TRANSLATE THE CURRENT USER POSITION:
+ CALL T$TRAN
+ DAC ATRA
+ DAC XU
+ DAC YU
+ DAC 0
CRA
- STA Y
- IMA X
+ STA XU
+ STA YU
+*
JMP* RST
*
- ABS
- ORG '3000
-*
+*
+********************************************************************************
+*
+*
+**** PL$MV - BASIC MOVE ROUTINE
+*
MOVE DAC ** MOVE YA!
*
-* JMP* MOVE
-*
LDX MOVE GET PARAMETERS
LDA* 0,1 X VALUE
+ STA XU
STA XN
LDA* 1,1 Y VALUE
+ STA YU
STA YN
LDA MOVE
ADD =3
STA MOVE CORRECT RETURN ADDRESS
*
- CALL M$APLI APPLY TRANSFORMATION MATRIX TO POSITION
- DAC MTRX
+ CALL T$APII APPLY TRANSFORMATION MATRIX TO POSITION
+ DAC ATRA
DAC XN
+ DAC YN
+ DAC XN
+ DAC YN
DAC 0
*
JST RMOV CALL INTO REAL MOVE SUBROUTINE
STA STPS
LDA DX
STA DS
+ STA DS0
LDA DY
STA DL
+ STA DL0
JMP GTE
*
XGTY LDA STPY
STA STPL
LDA DX
STA DL
+ STA DL0
LDA DY
- STA DS
-*
-GTE LDA DL LONG DISTANCE
+ STA DS
+ STA DS0
+*
+****************************************
+*
+* NOW ALL STEP ROUTINES, DL0, DS0, DL0, DS0 ETC.
+* ARE READY TO USE.
+*
+GTE LDA DL0 LONG DISTANCE
LGR 1 DIVIDE BY TWO
STA ERR INITIALIZE ERROR COUNTER
*
*
-*
-LOOP LDA DL
+*** MOVE LOOP
+*
+LOOP LDA DL LONG DISTANCE
SNZ
JMP FNSH END OF WORK - HOPE SO....
- SUB =1 DECREMENT DL
+*
+ SUB =1 DECREMENT LONG DISTANCE
STA DL
- LDA ERR
- SUB DS
+*
+ LDA ERR ERROR COUNTER
+ SUB DS0
STA ERR
SMI SKIP IF NOT OVERFLOWN (MINUS)
JMP NDIA NO DIAG STEP
- ADD DL RELOAD
+*
+*** DIAG STEP TO DO
+*
+ ADD DL0
STA ERR
LDA DS
SUB =1
STA DS
- JST* STPD
- JMP STEN END OF STEP
-NDIA JST* STPL LONG DIR STEP ONLY
+ JST* STPD DO DIAGONAL STEP
+ JMP LOOP RELOOP
+*
+*** NO DIAGONAL STEP TO DO
+*
+NDIA JST* STPL DO LONG DIRECTION STEP
STEN JMP LOOP RELOOP
*
+*
+*** END OF LOOP
FNSH LDA XN
STA X
LDA YN
********************************************************************************
*
*
-IDEN DAC ** RESET TRANSFORMATION MATRIX
- CALL M$INIT
- DAC MTRX
- JMP* IDEN
-*
-*
-********************************************************************************
+**** SCALE OUTPUT
*
SCLE DAC **
LDA* SCLE
STA FCTR
IRS SCLE
- CALL M$SCLE
- DAC MTRX
+ CALL T$SCLE
+ DAC ATRA
FCTR DAC 0
DAC 0
JMP* SCLE
*
*
+********************************************************************************
*
*
+**** ROTATE - RADIANT
+*
ROT DAC **
LDA* ROT
STA FCR2
IRS ROT
- CALL M$ROT
- DAC MTRX
+ CALL T$ROT
+ DAC ATRA
FCR2 DAC 0
DAC 0
JMP* ROT
*
*
********************************************************************************
+*
+*
+**** RLUP - UPDATE LATENT POSITION TO REAL POSITION
+*
+RLUP DAC **
+ LDA RELA LOAD FLAG
+ SNZ
+ JMP* RLUP NOTHING TO DO
+ JST MOVE
+ DAC XU
+ DAC YU
+ DAC 0
+ CRA
+ STA RELA CLEAR FLAG
+ JMP* RLUP
+*
+*
+********************************************************************************
+*
+*
+**** ROTATE - INTEGER DEGREES
+*
+ROTI DAC **
+ LDA* ROTI
+ STA FCR3
+ IRS ROTI
+ CALL T$ROTI
+ DAC ATRA
+FCR3 DAC 0
+ DAC 0
+ JMP* ROTI
+*
+*
+********************************************************************************
+*
+*
+**** SCALE - INTEGER PERCENTS
+*
+SCLI DAC **
+ LDA* SCLI
+ STA FCR4
+ IRS SCLI
+*
+ CALL T$SCLI
+ DAC ATRA
+FCR4 DAC 0
+ DAC 0
+ JMP* SCLI
+*
+********************************************************************************
*
*** MOVE COORDINATE SYSTEM RELATIVELY
*
RMR DAC **
LDA* RMR
- STA PTR
- LDA X
- SUB* PTR
- STA X
+ STA XTR
IRS RMR
LDA* RMR
- STA PTR
- LDA Y
- SUB* PTR
- STA Y
+ STA YTR
IRS RMR
IRS RMR
+*
+ CALL T$TRAN
+ DAC ATRA
+XTR DAC **
+YTR DAC **
+ DAC 0
+*
JMP* RMR
-PTR DAC **
*
-*
+*
**********************
*
* VARIABLES
*
-X DEC 0 PEN POSITION, X VALUE
-Y DEC 0 PEN POSITION, Y VALUE
+X DEC 0 HARDWARE VIEW PEN POSITION, X VALUE
+Y DEC 0 HARDWARE VIEW PEN POSITION, Y VALUE
XN DEC 0 NEW PEN POSITION, X VALUE
YN DEC 0 NEW PEN POSITION, Y VALUE
DX DEC 0 X DIFFERENCE TO GO
DY DEC 0 Y DIFFERENCE TO GO
+TMPX DEC 0 TEMPORARY X VALUE
+TMPY DEC 0 TEMPORARY Y VALUE
*
-DL DEC 0 LONG DISTANCE NEGATIVE
-DS DEC 0 SHORT DISTANCE NEGATIVE
+DL0 DEC 0 INITIAL LONG DISTANCE
+DS0 DEC 0 INITIAL SHORT DISTANCE
+DL DEC 0 LONG DISTANCE
+DS DEC 0 SHORT DISTANCE
STPL DAC ** ROUTINE TO LONG DISTANCE STEP
STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
STPD DAC ** ROUTINE TO DIAGONAL STEP
YB DEC 0 REAL SECOND POINT Y COORDINATE
D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
+RELA DEC 0 FLAG INDICATING THAT RELATIVE POSITIONING HAS OCCURED
*
**** GLUE IN THE MOVEMENT ROUTINES
*
MDR XAC PL$DR
*
********************************************************************************
-*
+*
+*
+**** AFFINE TRASFORMATION DATA AND REST OF GRAPHIC CONTEXT
+*
+* OLD PROGRAMS DON'T HAVE TO WORRY ABOUT THAT. NEWER PROGRAMS SHOULD.
+*
*** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
*** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
-MTRX OCT '040300 A11
+ATRA OCT '040300 A11 (CONSTANT 1.0)
OCT '000000
OCT '000000 A12
OCT '000000
OCT '000000 A21
OCT '000000
- OCT '040300 A22
+ OCT '040300 A22 (CONSTANT 1.0)
OCT '000000
-*
+*
+VECT DEC 0 X TRANSLATION
+ DEC 0 Y TRANSLATION
+XU DEC 0 USER VIEW PEN POSITION, X VALUE
+YU DEC 0 USER VIEW PEN POSITION, Y VALUE
+*
+VECX EQU VECT
+VECY EQU VECT+1
*
********************************************************************************
*