* (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES * * * PROGRAM TITLE: * PL$MV (PL$MV,PL$RST,PL$LN,PL$X,PL$Y,PL$RMR) * * PLOTTER MOVEMENT ROUTINES * * * REVISIONS: * 1.0 (2007-05-28) - INITIAL REVISION * * 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE * * 1.2 (2007-12-15) - ADDED PL$X and PL$Y POSITION EXPORTS * ADDED PL$RMR TRANSLATIION ROUTINE * * 1.3 (2007-12-19) - ADDED TRANSFORMATION MATRIX SUPPORT TO PL$MV. * MATRIX PL$MAT IS NOW APPLIED BEFORE * ANY MOVE INSTRUCTION. * * * AUTHOR: * * PHILIPP HACHTMANN * * * PURPOSE: * * PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS * * * STORAGE: * * ??? (OCTAL) * ??? (DECIMAL) * * * USAGE * * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO * * CALL PL$MV - MOVE TO POINT SPECIFIED * DAC XN BY XN * DAC YN AND YN VALUE * DAC 0 * * CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN * DAC X1 * DAC Y1 * DAC X2 * DAC Y2 * DAC 0 * * CALL PL$RMR - MOVE ORIGIN RELATIVELY * DAC DX * DAC DY * DAC 0 * * CALL PL$SCL - SCALE TRANSFORMATION * DAC SCALE SCALE FACTOR, FLOAT * DAC 0 * * CALL PL$IDN - RESET TRANSFORMATION MATRIX * ******************************************************************************** * * SUBR PL$MV,MOVE 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$SCL,SCLE SUBR PL$ROT,ROT SUBR PL$IDN,IDEN * * * REL THIS IS A RELOCATABLE OBJECT ORG '0 * ******************************************************************************** * LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT LDA* LINE X1 STA X1 LDA* X1 STA X1 IRS LINE LDA* LINE Y1 STA Y1 LDA* Y1 STA Y1 IRS LINE LDA* LINE X2 STA X2 LDA* X2 STA X2 IRS LINE LDA* LINE Y2 STA Y2 LDA* Y2 STA Y2 IRS LINE TALLY RETURN ADDRESS IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY * * CALL M$APLI DAC MTRX DAC X1 DAC 0 * CALL M$APLI DAC MTRX DAC X2 DAC 0 * * * LDA X SUB X1 SPL SKIP IF SIGN PLUS TCA TWO'S COMPLEMENT IF NEEDED STA D1 LDA Y SUB Y1 SPL TCA ADD D1 STA D1 * LDA X SUB X2 SPL SKIP IF SIGN PLUS TCA TWO'S COMPLEMENT IF NEEDED STA D2 LDA Y SUB Y2 SPL TCA ADD D2 CAS D1 JMP D2BG D2 IS BIGGER! NOP * D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2 STA XA LDA Y2 STA YA LDA X1 STA XB LDA Y1 STA YB JMP WOKI WORK! * D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1 STA XA LDA Y1 STA YA LDA X2 STA XB LDA Y2 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 LDA XA STA XN LDA YA STA YN JST RMOV REAL MOVE * NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE LDA XB STA XN LDA YB STA YN JST RMOV REAL MOVE JMP* LINE END OF THE LINE :-) * * * ******************************************************************************** * **** MOVE PEN ROUTINE * RST DAC ** SET POINT ZERO CRA STA Y IMA X JMP* RST * ABS ORG '3000 * MOVE DAC ** MOVE YA! * * JMP* MOVE * LDX MOVE GET PARAMETERS LDA* 0,1 X VALUE STA XN LDA* 1,1 Y VALUE STA YN LDA MOVE ADD =3 STA MOVE CORRECT RETURN ADDRESS * CALL M$APLI APPLY TRANSFORMATION MATRIX TO POSITION DAC MTRX DAC XN DAC 0 * JST RMOV CALL INTO REAL MOVE SUBROUTINE JMP* MOVE RETURN * **************************************** * RMOV DAC ** REAL MOVE SUBROUTINE LDA XN SUB X STA DX LDA YN SUB Y STA DY * LDA DX SMI JMP DXP DX POSITIVE * DX NEGATIVE TCA STA DX NOW, DX IS POSITIVE! LDA ML STA STPX LDA MUL STA DIYP LDA MDL STA DIYN JMP DXNP DXP LDA MR STA STPX LDA MUR STA DIYP LDA MDR STA DIYN JMP DXNP * DXNP LDA DY SMI JMP DYP DY POSITIVE * DY NEGATIVE TCA STA DY NOW, DY IS POSITIVE! LDA MD STA STPY LDA DIYN STA STPD JMP DYNP DYP LDA MU STA STPY LDA DIYP STA STPD * DYNP LDA DX CAS DY JMP XGTY DX GREATER DY YGTX NOP DY GREATER OR EQUAL DX LDA STPY STA STPL LDA STPX STA STPS LDA DX STA DS LDA DY STA DL JMP GTE * XGTY LDA STPY STA STPS LDA STPX STA STPL LDA DX STA DL LDA DY STA DS * GTE LDA DL LONG DISTANCE LGR 1 DIVIDE BY TWO STA ERR INITIALIZE ERROR COUNTER * * * LOOP LDA DL SNZ JMP FNSH END OF WORK - HOPE SO.... SUB =1 DECREMENT DL STA DL LDA ERR SUB DS STA ERR SMI SKIP IF NOT OVERFLOWN (MINUS) JMP NDIA NO DIAG STEP ADD DL RELOAD STA ERR LDA DS SUB =1 STA DS JST* STPD JMP STEN END OF STEP NDIA JST* STPL LONG DIR STEP ONLY STEN JMP LOOP RELOOP * FNSH LDA XN STA X LDA YN STA Y JMP* RMOV END OF THE ROUTINE * * ******************************************************************************** * * IDEN DAC ** RESET TRANSFORMATION MATRIX CALL M$INIT DAC MTRX JMP* IDEN * * ******************************************************************************** * SCLE DAC ** LDA* SCLE STA FCTR IRS SCLE CALL M$SCLE DAC MTRX FCTR DAC 0 DAC 0 JMP* SCLE * * * * ROT DAC ** LDA* ROT STA FCR2 IRS ROT CALL M$ROT DAC MTRX FCR2 DAC 0 DAC 0 JMP* ROT * * ******************************************************************************** * *** MOVE COORDINATE SYSTEM RELATIVELY * RMR DAC ** LDA* RMR STA PTR LDA X SUB* PTR STA X IRS RMR LDA* RMR STA PTR LDA Y SUB* PTR STA Y IRS RMR IRS RMR JMP* RMR PTR DAC ** * * ********************** * * VARIABLES * X DEC 0 PEN POSITION, X VALUE Y DEC 0 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 * DL DEC 0 LONG DISTANCE NEGATIVE DS DEC 0 SHORT DISTANCE NEGATIVE STPL DAC ** ROUTINE TO LONG DISTANCE STEP STPS DAC ** ROUTINE TO SHORT DISTANCE STEP STPD DAC ** ROUTINE TO DIAGONAL STEP ERR DEC 0 ERROR COUNTER * 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 * 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 * **** GLUE IN THE MOVEMENT ROUTINES * MU XAC PL$U MD XAC PL$D ML XAC PL$L MR XAC PL$R MUL XAC PL$UL MUR XAC PL$UR MDL XAC PL$DL MDR XAC PL$DR * ******************************************************************************** * *** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS *** DON'T HAVE TO CARE ABOUT THAT (HOPE SO) MTRX OCT '040300 A11 OCT '000000 OCT '000000 A12 OCT '000000 OCT '000000 A21 OCT '000000 OCT '040300 A22 OCT '000000 * * ******************************************************************************** * * END