X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=lib%2Fhachti%2Fsrc%2Fpl%24mv.asm;h=6e314c943645f2739e24933c42f163351b99226a;hb=c0fc7e111cb540730e471bc795309f65cf32a512;hp=9d4f338823d5f118fb7e6c63711f5a6c479ce684;hpb=8fac3a64e23edb8f2cd4cdc28631d603075de709;p=h316.git diff --git a/lib/hachti/src/pl$mv.asm b/lib/hachti/src/pl$mv.asm index 9d4f338..6e314c9 100644 --- a/lib/hachti/src/pl$mv.asm +++ b/lib/hachti/src/pl$mv.asm @@ -27,7 +27,8 @@ * * PURPOSE: * -* PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS +* PROVIDE DRAWING AND COORDINATE TRANSFORMATION +* ROUTINES FOR INCREMENTAL PLOTTERS * * * STORAGE: @@ -64,85 +65,165 @@ * CALL PL$IDN - RESET TRANSFORMATION MATRIX * ******************************************************************************** -* -* +* SUBR PL$MV,MOVE SUBR PL$RST,RST + SUBR PL$X,XU + SUBR PL$Y,YU + SUBR PL$MVR,MVR SUBR PL$LN,LINE + SUBR LINE SUBR PL$RMR,RMR - SUBR PL$X,X - SUBR PL$Y,Y - SUBR PL$MAT,MTRX + 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 + CALL PL$PU + 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,125 @@ 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 + 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 +580,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 +606,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 * ******************************************************************************** *