* (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$IDN,IDEN * * * 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 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 DAC 0 * NOP NOP NOP * CALL M$APII DAC MTRX X1P DAC 0 Y1P DAC 0 DAC 0 NOP NOP NOP * 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 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 :-) * * *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 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 NOP NOP JMP* SCLE * * ******************************************************************************** * *** 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 TMP DAC ** UNIVERSAL POINTER * * GLUE IN THE MOVEMENT 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