*20 /PLOTR - INCREMENTAL PLOTTER OVERLAY FOR FOCAL.12 /DO NOT USE WITH "4WORD" ! PMODE AC1H=41 ALIGN=6623 AXIN=10 BOTTOM=35 CNTR=57 EFUN3I=136 FADD=1000 FGET=0 FINT=4407 FSUB=2000 FMUL=4000 FNTABF=374 FPUT=6000 FXIT=0 ERROR5=2725 EVAL=1613 EX1=40 EXP=44 HORD=45 INTEGER=53 LORD=46 M5=120 NOCLK=2653 OVER1=43 P13=5 PUSHJ=4540 SAVLK=2601 T1=32 T2=71 ORIGIN=4620 *BOTTOM ORIGIN-1 *FNTABF+6 /REMOVE EXTENDED FUNCTIONS ERROR5 /FATN ERROR5 /FEXP ERROR5 /FLOG /AND USE THE SPACE FOR THE GRAPHICS OVERLAYS. *FNTABF+15 /REPLACES FX WITH FX(R,P,Q,X0,Y0,K) FCIN *ORIGIN FCIN, JMS I INTEGER /READ ARGUMENTS CMA DCA R /SAVE THE POINT COUNT TAD XXP DCA AXIN /START DATA POINTERS TAD M5 /FOR 5 MORE ITEMS DCA CT JMP GETB ///// GETA, IAC DCA OVER1 TAD P13 DCA EX1 DCA AC1H JMS I ALIGNC DCA LORD TAD EXP DCA I AXIN TAD HORD DCA I AXIN TAD LORD DCA I AXIN GETB, PUSHJ EVAL-1 ISZ CT /TEST FOR END OF DATA JMP GETA ISZ I PRFLAG /RAISE PLOTTER FLAG ARTIFICIALLY TAD LORD /TEST FOR CIRCLE OR LINE SZA CLA JMP XFCIR /SAVE NORMALIZED VALUE OF K. XFLIN, CLL /VECTOR PLOT ALGORITHM TAD X01 TAD P1 DCA X01 RAL TAD X00 TAD P0 DCA X00 TAD X00 JMS I PSX /SAVE DELTA X CLL TAD Y01 TAD Q1 DCA Y01 RAL TAD Y00 TAD Q0 DCA Y00 TAD Y00 JMS I SIY /SAVE DELTA Y ISZ R JMP XFLIN JMP I EFUN3I ///// XFCIR, FINT FPUT KK FXIT XFCAL, FINT /CIRCLE ALGORITHM FGET QQ FMUL KK FPUT CT FGET PP FSUB CT FPUT PP FADD XX FXIT JMS I INTEGER /X+P-QK JMS I PSX FINT /CLEARS AC FGET PP FMUL KK /SECOND SCALE FACTOR FADD QQ FPUT QQ FADD YY FXIT JMS I INTEGER /Y+Q+PK JMS I SIY ISZ R JMP XFCAL JMP I EFUN3I CT, 0 0 0 PP, 0 P0, 0 P1, 0 QQ, 0 Q0, 0 Q1, 0 XX, 13 X00, 0 X01, 0 YY, 13 Y00, 0 Y01, 0 KK, 0 0 0 XXP, PP-1 ALIGNC, ALIGN R, 0 SIY, SY PSX, SX PRFLAG, RFLAG XINC=T1 YINC=T2 /SAVE THE CHANGE IN X *5000 SX, 0 CIA /AC HAS NEW VALUE TAD OLDX DCA XINC TAD XINC CIA TAD OLDX DCA OLDX JMP I SX OLDX, 0 RFLAG, 1 PWAIT, 0 /WAIT UNTILL RFLAG OR REAL FLAG READY. 6501 /TEST REAL FLAG SKP /GO TEST OTHER FLAG ISZ RFLAG /DUMMY UP TO REMEMBER REAL FLAG TAD RFLAG SNA CLA JMP .-5 6502 /CLEAR HARDWARE FLAG ANYHOW DCA RFLAG JMP I PWAIT PINT, 0 6501 /SKP ON PLOTTER FLAG JMP PINT2 6502 /CLEAR PLOTTER FLAG ISZ RFLAG PINT2, TAD I PSAVLK /JUST CODING CHANGE RAL CLL JMP I .+1 NOCLK+2 PSAVLK, SAVLK OLDY, 0 SY, 0 CIA TAD OLDY DCA YINC TAD YINC CIA TAD OLDY IOF /PROTECT ZERO POSITIONS. DCA OLDY TAD XINC SNA CLA JMP DOY /AVOID RAISING FLAG YET PWAIT1 TAD XINC SPA JMP .+5 CIA STEP 6521 /PEN LEFT JMP DOXY STEP 6511 /PEN RIGHT JMP DOXY ///// DOY, TAD YINC SNA CLA JMP DOXT PWAIT1 DOXY, TAD YINC SNA JMP DOXT SPA JMP .+5 CIA STEP 6512 /DRUM UP JMP DOXT STEP 6514 /DRUM DOWN DOXT, ION /RESTORE INTERRUPTABILITY JMP I SY //// STEP=JMS I . DOP PWAIT1=JMS I . PWAIT DOP, 0 /FLAG IS LEFT IN THE SET STATE. DCA CNTR TAD I DOP ISZ DOP DCA .+1 GO2, HLT /MODIFIED FOR PLOTTER IOT. ISZ CNTR SKP JMP I DOP /FAST EXIT 6504 / PEN UP TAD GO2 DCA .+2 PWAIT2 HLT /6000 PWAIT2 ISZ CNTR JMP .-3 6524 / PEN DOWN JMP I DOP PWAIT2=JMS I . PWAIT /OVERLAY TO CLEAR PLOTTER FLAG AND /RESTORE MEMORY FIELDS IF 12K *NOCLK NOCLK, JMS I .+1 PINT RMF FIELD 1 *1225 /DONT LOAD OLD OVERLAYS 1067 *1247 1173 *1323 6017 /TO USE PLOTR /INSERT THE FOLLOWING TWO GROUPS OF FOCAL-12 INSTRUCTIONS /FOR EXECUTING GRAPHICS VIA FOCAL-12 /FINITE DIFFERENCE EQUATION OF A CIRCLE FOR FOCAL-12: /16.20 S P=X-X0;S Q=Y-Y0;S R=FSQT(Q^2+P^2) /16.30 S Z=FX(6.3*R*C,P,Q,X0,Y0,S/R) /16.40 S X0=X;S Y0=Y /LINEAR DIFFERENCE EQUATION OF A LINE: /17.10 D 16.2;S Z=FX(R,P/R,Q/R,X0,Y0,0);D 16.4 /THEN USE THE FOLLOWING PROCEEDURES: /TO GO TO A POINT X,Y: SET Z=FX(,,,X,Y,) /TO DRAW LINE X0,Y0 TO X,Y: DO 17 /TO SET X0,Y0=X,Y: DO 16.4 /TO DRAW A CIRCLE ABOUT X0,Y0 STARTING AT X,Y /AND GOING COUNTERCLOCKWISE FOR FRACTION /OF A CIRCLE ALPHA : SET S=+1;SET C=ALPHA; DO 16 /TO GO CLOCKWISE: SET S=-1;DO 16 /X0,Y0 ARE AUTOMATICALLY SET TO X,Y AT EACH COMPLETION OF GROUPS 16+17 /IF NEW X0,Y0 ARE DIFFERENT THEN LINE IS INVISIBLE. /NOTE 1 - VARIABLES /GROUPS 16 AND 17 CREATE OR USE THE VARIABLES /X,Y,X0,Y0,Z,R,C,P,Q,K,AND S. /S MAY BE REPLACED BY A 1 IF DESIRED. /IF C IS =0, A "DO 16" WILL ONLY MAKE A DOT. /NOTE 2 - COORDINATES / /FOR CALCOMP PLOTTER /ZERO IS WHERE YOU PUT IT. /X AND Y = + OR - 2047 ( 204 INCHES ) /FOR KV8/I / Y= +1024 / . /X=-1024, X=+1024 / . / Y= -1024 /NOTE 3 - DEMONSTRATION PROGRAM /01.10 S C=.5;S S=1;S A=800 /01.20 S X0=0;S Y0=0 /01.30 S X=A;S Y=Y0;D 17;S Y=A;D 17;S X=0;D 17;S Y=0;D 17 /01.40 S X0=400;S Y0=400;S Y=Y0;S X=200;D 16 /01.50 G 1.2 /16.20 S P=X-X0;S Q=Y-Y0;S R=FSQT(Q^2+P^2) /16.30 S Z=FX(6.3*R*C,P,Q,X0,Y0,S/R) /16.40 S X0=X;S Y0=Y /17.10 D 16.2 /17.15 S Z=FX(R,P/R,Q/R,X0,Y0,0);D 16.4 /NOTE 4 - CONIC SECTIONS /CONIC SECTIONS SUCH AS ELIPSES, HYPERBOLAS, AND /PARABOLAS MAY BE GENERATED BY FDIS IF DIFFERENT SCALE FACTORS /ARE USED INSTEAD OF KK FOR THE X AND Y COORDINATE CALCULATIONS. /THIS MIGHT BE DONE SIMPLY BY ADDING AN EXTRA ARGUMENT /IN THE CIRCLE CALL OF FX. IT COULD ALSO BE DONE VIA A CALL TO AN FNEW(). LISTAP -7