*** empty log message ***
[h316.git] / lib / iolib / src / pl$mv.asm
index b202b72e82f57c6342faa05e88b966f26d57ae10..97d4dfe5c3a806775e6a4ae787c92981ccd627af 100644 (file)
@@ -2,13 +2,16 @@
 *
 *    
 * PROGRAM TITLE:  
-*                 PL$MV (PL$MV,PL$RST) 
+*                 PL$MV (PL$MV,PL$RST,PL$LN
 *                 
 *                 PLOTTER MOVEMENT ROUTINES
 *                         
 *               
 * REVISIONS: 
 *            1.0 (2007-05-28)
+*            1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE
+*                               
+*
 *
 * AUTHOR:      
 *
 *              CALL     PL$MV   - MOVE TO POINT SPECIFIED
 *              DAC     XN        BY XN
 *             DAC      YN        AND YN VALUE
-*              
+*
+*              CALL    PL$LN   - DRAW LINE AND LEAVE PEN DOWN
+*              DAC      X1
+*              DAC      Y1
+*              DAC      X2
+*              DAC      Y2
+*              DAC      0
 *
 *
 ********************************************************************************
 *
        SUBR    PL$MV,MOVE
        SUBR    PL$RST,RST
+       SUBR    PL$LN,LINE
+*
 *
 *
        REL             THIS IS A RELOCATABLE OBJECT
        ORG     '0
 *
+********************************************************************************
+*
+LINE   DAC     0               DRAW A LINE FROM NEAR STARTING POINT
+       LDA*    LINE    X1
+       STA     X1P     
+       IRS     LINE
+       LDA*    LINE    Y1
+       STA     Y1P     
+       IRS     LINE
+       LDA*    LINE    X2
+       STA     X2P     
+       IRS     LINE
+       LDA*    LINE    Y2
+       STA     Y2P     
+       IRS     LINE    TALLY RETURN ADDRESS
+       IRS     LINE    AGAIN FOR FORTRAN IV COMPATIBILITY
+*      
+       LDA     X
+       SUB*    X1P
+       SPL             SKIP IF SIGN PLUS
+       TCA             TWO'S COMPLEMENT IF NEEDED
+       STA     D1
+       LDA     Y
+       SUB*    Y1P
+       SPL
+       TCA
+       ADD     D1
+       STA     D1
+*      
+       LDA     X
+       SUB*    X2P
+       SPL             SKIP IF SIGN PLUS
+       TCA             TWO'S COMPLEMENT IF NEEDED
+       STA     D2
+       LDA     Y
+       SUB*    Y2P
+       SPL
+       TCA
+       ADD     D2
+       CAS     D1
+       JMP     D2BG    D2 IS BIGGER!
+       NOP
+*
+D1BG   LDA*    X2P     DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
+       STA     XA
+       LDA*    Y2P
+       STA     YA
+       LDA*    X1P
+       STA     XB
+       LDA*    Y1P
+       STA     YB
+       JMP     WOKI    WORK!
+*
+D2BG   LDA*    X1P     DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
+       STA     XA
+       LDA*    Y1P
+       STA     YA
+       LDA*    X2P
+       STA     XB
+       LDA*    Y2P
+       STA     YB
+*
+WOKI   LDA     X       TEST IF STARTING POINT IST CURRENT POSITION
+       CAS     XA
+       JMP     MV1
+       JMP     *+2
+       JMP     MV1
+       LDA     Y
+       CAS     YA
+       JMP     MV1
+       JMP     *+2
+       JMP     MV1
+       JMP     NM1
+*      
+MV1    CALL    PL$PU   MOVE TO THE STARTING POSITION
+       CALL    PL$MV
+       DAC     XA
+       DAC     YA
+       DAC     0
+NM1    CALL    PL$PD   WE ARE AT BEGINNING OF LINE
+       CALL    PL$MV
+       DAC     XB
+       DAC     YB
+       DAC     0
+       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
        STA     X