* (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES * * * PROGRAM TITLE: * PL$MV (PL$MV,PL$RST) * * PLOTTER MOVEMENT ROUTINES * * * REVISIONS: * 1.0 (2007-05-28) * * 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 * * * ******************************************************************************** * * SUBR PL$MV,MOVE SUBR PL$RST,RST * * REL THIS IS A RELOCATABLE OBJECT ORG '0 * * RST DAC ** SET POINT ZERO STA X CRA STA Y IMA X JMP* RST * * MOVE DAC ** MOVE YA! * LDA* MOVE GET PARAMETERS STA TMP LDA* TMP STA XN SUB X STA DX IRS MOVE LDA* MOVE STA TMP LDA* TMP STA YN SUB Y STA DY IRS MOVE IRS MOVE CORRECT RETURN ADDRESS * * HLT * LDA YN * IAB * LDA XN * HLT * JMP 1 * 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* MOVE END OF THE ROUTINE ********************** * * 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 * * END