X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=lib%2Fiolib%2Fsrc%2Fpl%24mv.asm;h=97d4dfe5c3a806775e6a4ae787c92981ccd627af;hb=e8dc8d0c59148be34177937adffada9f50feaa4b;hp=b202b72e82f57c6342faa05e88b966f26d57ae10;hpb=fcb7b340c0c50feddfd0b1a4b2df25e41c374a12;p=h316.git diff --git a/lib/iolib/src/pl$mv.asm b/lib/iolib/src/pl$mv.asm index b202b72..97d4dfe 100644 --- a/lib/iolib/src/pl$mv.asm +++ b/lib/iolib/src/pl$mv.asm @@ -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: * @@ -33,7 +36,13 @@ * 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 * * ******************************************************************************** @@ -41,11 +50,113 @@ * 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