X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=lib%2Fhachti%2Fsrc%2Fpl%24mv.asm;h=3a142f7cce6411f14518a683d6cdb94c835dca7f;hb=eabafccaa9119c64c3964f25035a71579de18ddd;hp=af939176692672853a7ea950dfefec85976ff003;hpb=6f7368dad80457b5dd8f72bf3cf6cc661e36904b;p=h316.git diff --git a/lib/hachti/src/pl$mv.asm b/lib/hachti/src/pl$mv.asm index af93917..3a142f7 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: @@ -67,57 +68,140 @@ * * 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 * ******************************************************************************** *