*** empty log message ***
[h316.git] / lib / hachti / src / pl$mv.asm
index 9d4f338823d5f118fb7e6c63711f5a6c479ce684..36accdc9a7fe25bf6fdc25cd3db45044bae89205 100644 (file)
@@ -27,7 +27,8 @@
 *
 * 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    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$IDN,IDEN
+       SUBR    PL$SCI,SCLI
+       SUBR    PL$ROT,ROT
+       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     X1P     
-       IRS     LINE
-       LDA*    LINE    Y1
-       STA     Y1P     
+       STA     X1P
+       IRS     LINE    
+       LDA*    LINE    Y1
+       STA     Y1P
        IRS     LINE
        LDA*    LINE    X2
-       STA     X2P     
+       STA     X2P
        IRS     LINE
        LDA*    LINE    Y2
-       STA     Y2P     
+       STA     Y2P
        IRS     LINE    TALLY RETURN ADDRESS
-       NOP
        IRS     LINE    AGAIN FOR FORTRAN IV COMPATIBILITY
-       NOP
-*      
-       NOP
-       NOP
-       NOP
-*
-       CALL    M$APII
-       DAC     MTRX
-*      JMP     Y2P+2
-X2P    DAC     0
-Y2P    DAC     0
+*   
+       CALL    T$APII  APPLY MATRIX
+       DAC     ATRA
+       DAC     X1
+       DAC     Y1
+X1P    DAC     **
+Y1P    DAC     **
        DAC     0
 *
-       NOP
-       NOP
-       NOP
-*
-       CALL    M$APII
-       DAC     MTRX
-X1P    DAC     0
-Y1P    DAC     0
+       CALL    T$APII  APPLY MATRIX
+       DAC     ATRA
+       DAC     X2
+       DAC     Y2
+X2P    DAC     **
+Y2P    DAC     **
        DAC     0
-       NOP
-       NOP
-       NOP
-*
+* 
+* 
        LDA     X
-       SUB*    X1P
+       SUB     X1
        SPL             SKIP IF SIGN PLUS
        TCA             TWO'S COMPLEMENT IF NEEDED
        STA     D1
        LDA     Y
-       SUB*    Y1P
+       SUB     Y1
        SPL
        TCA
        ADD     D1
        STA     D1
 *      
        LDA     X
-       SUB*    X2P
+       SUB     X2
        SPL             SKIP IF SIGN PLUS
        TCA             TWO'S COMPLEMENT IF NEEDED
        STA     D2
        LDA     Y
-       SUB*    Y2P
+       SUB     Y2
        SPL
        TCA
        ADD     D2
@@ -150,23 +231,23 @@ Y1P       DAC     0
        JMP     D2BG    D2 IS BIGGER!
        NOP
 *
-D1BG   LDA*    X2P     DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
+D1BG   LDA     X2      DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
        STA     XA
-       LDA*    Y2P
+       LDA     Y2
        STA     YA
-       LDA*    X1P
+       LDA     X1
        STA     XB
-       LDA*    Y1P
+       LDA     Y1
        STA     YB
        JMP     WOKI    WORK!
 *
-D2BG   LDA*    X1P     DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
+D2BG   LDA     X1      DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
        STA     XA
-       LDA*    Y1P
+       LDA     Y1
        STA     YA
-       LDA*    X2P
+       LDA     X2
        STA     XB
-       LDA*    Y2P
+       LDA     Y2
        STA     YB
 *
 WOKI   LDA     X       TEST IF STARTING POINT IST CURRENT POSITION
@@ -196,46 +277,50 @@ NM1       CALL    PL$PD   WE ARE AT BEGINNING OF LINE
        JST     RMOV    REAL MOVE
        JMP*    LINE    END OF THE LINE :-)
 *
-*
-*X1P   DAC     0       ARGUMENT POINER TO X1
-*Y1P   DAC     0       ARGUMENT POINER TO Y1
-*X2P   DAC     0       ARGUMENT POINER TO X2
-*Y2P   DAC     0       ARGUMENT POINER TO Y2
-XA     DEC     0       REAL FIRST POINT X COORDINATE
-YA     DEC     0       REAL FIRST POINT Y COORDINATE
-XB     DEC     0       REAL SECOND POINT X COORDINATE
-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
-*      
-*
+* 
 ********************************************************************************       
 *
-RST    DAC     **      SET POINT ZERO
+**** MAKE CURRENT X AND Y THE ORIGIN
+* 
+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
@@ -298,8 +383,10 @@ YGTX       NOP             DY GREATER OR EQUAL DX
        STA     STPS
        LDA     DX
        STA     DS
+       STA     DS0
        LDA     DY
        STA     DL
+       STA     DL0
        JMP     GTE
 *
 XGTY   LDA     STPY
@@ -308,35 +395,53 @@ 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
@@ -347,61 +452,124 @@ FNSH     LDA     XN
 ********************************************************************************
 *
 *
-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
-       NOP
-       NOP
-       JMP*    SCLE    
+       DAC     0
+       JMP*    SCLE
+* 
+* 
+********************************************************************************
+* 
+* 
+**** ROTATE - RADIANT
+* 
+ROT    DAC     **
+       LDA*    ROT
+       STA     FCR2
+       IRS     ROT
+       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
@@ -411,9 +579,22 @@ STPX       DAC     **      X STEP ROUTINE
 STPY   DAC     **      Y STEP ROUTINE
 DIYP   DAC     **      DIAGONAL X-DIR+UP STEP ROUTINE
 DIYN   DAC     **      DIAGONAL X-DIR+DOWN STEP ROUTINE
-TMP    DAC     **      UNIVERSAL POINTER
 *
-*                      GLUE IN THE MOVEMENT
+X1     DEC     0       LINE START POINT, X
+Y1     DEC     0       LINE START POINT, Y
+X2     DEC     0       LINE END POINT, X
+Y2     DEC     0       LINE END POINT, Y
+* 
+XA     DEC     0       REAL FIRST POINT X COORDINATE
+YA     DEC     0       REAL FIRST POINT Y COORDINATE
+XB     DEC     0       REAL SECOND POINT X COORDINATE
+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
+* 
 MU     XAC     PL$U
 MD     XAC     PL$D
 ML     XAC     PL$L
@@ -424,18 +605,30 @@ MDL       XAC     PL$DL
 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
 *
 ********************************************************************************
 *