*** empty log message ***
[h316.git] / lib / hachti / src / pl$mv.asm
index af939176692672853a7ea950dfefec85976ff003..3a142f7cce6411f14518a683d6cdb94c835dca7f 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    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
@@ -192,37 +276,50 @@ NM1       CALL    PL$PD   WE ARE AT BEGINNING OF LINE
        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
@@ -285,8 +382,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
@@ -295,35 +394,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
@@ -334,73 +451,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
        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
@@ -422,6 +590,7 @@ 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
 * 
@@ -435,18 +604,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
 *
 ********************************************************************************
 *