ASMB,R,L,C HED * 7210A PLOTTER "PLOT" ROUTINE A92409-80001-1 REV.D NAM PLOT,7 92409-80001 REV. D * **************************************************************** * * 7210A PLOTTER UTILITY * **************************************************************** ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** * * LIST: A92409-80001-1 * SOURCE: 92409-80001 * * REV. D 750313 C. HAMILTON (3-13-75) * **************************************************************** * * * * * ENT WHERE,FACT,PLOT,PLTLU ENT LLEFT,URITE,SFACT * * EXT .ENTR,EXEC,FLOAT,IFIX,RSFLG * * THIS IS THE CENTRAL PROGRAM IN THE * HP REAL-TIME EXECUTIVE OPERATING SYSTEM * PLOTTER PACKAGE. * * ************************* * * * THERE ARE 7 SECTIONS TO THE PLOT PROGRAM * * 1-WHERE ESTABLISHES CURRENT PEN LOCATION * 2-FACT ESTABLISHES SCALING FACTOR OF PLOT * 3-PLOT CONVERTS THE X,Y AND PEN DATA TO PLOT * COMMANDS. * 4-PLTLU ESTABLISHES PLOTTER LOG. UNIT # * 5-LLEFT MOVES PEN TO LOWER LEFT CORNER AND * ESTABLISHES ORIGIN AT 0,0. * 6-URITE MOVES PEN TO UPPER RIGHT CORNER * 7-SFACT SCALES PLOTTER FOR 10X15 INCH PLOT * * * * SKP ********** *** *** *** * * **** ** WHERE **** * * THE -WHERE- CALL ALLOWS THE USER TO DETERMINE THE * CURRENT PLOTTER PEN POSITION. THE NUMBERS PROVIDED * TO THE USER WILL BE IN FLOATING POINT. * * * - FORTRAN LINKAGE - * * CALL WHERE(X,Y) * * X SPECIFIES THE 2 WORD BUFFER FOR X (REAL). * Y SPECIFIES THE 2 WORD BUFFER FOR Y (REAL). * * * * * * * - CALLING SEQUENCE - * * JSB WHERE WHERE ROUTINE ORIGIN * DEF *+3 RETURN * DEF XC LOCATION OF USER X 2 WD BUFFER * DEF YC LOCATION OF USER Y 2 WD BUFFER * * ** ** ** ** ** * * XC OCT 0 ADDRESS OF 2 WD BUFFER FOR X YC OCT 0 ADDRESS OF 2 WD BUFFER FOR Y * * WHERE NOP JSB .ENTR DEF WHERE-2 LDA #XPEN FETCH CURRENT X POSITION JSB FLOAT CONVERT FROM FIXED TO FLOATING PT FDV #CFAC DST XC,I STORE IN USERS BUFFER * LDA #YPEN FETCH CURRENT Y POSITION JSB FLOAT CONVERT FROM FIXED TO FLOATING FDV #DFAC DST YC,I STORE IN USERS BUFFER JMP WHERE,I EXIT * * * * SKP * *********** **** * * ***** FACT **** * * * THE -FACT- CALL ALLOWS THE USER TO VARY THE SCALING * FACTOR USED FOR EACH PLOT. THE SCALING FACTOR WILL * BE INITIALIZED AT "1". THE FACTOR IS * MULTIPLIED BY 1000,0 FOR USE WITH * THE .001 " (SET UP FOR 10") PLOTTER * * * - FORTRAN LINKAGE - * * CALL FACT(AX,AY) * * AX = X PLOT FACTOR (REAL) * AY = Y PLOT FACTOR (REAL) * * * * * * - CALLING SEQUENCE - * * JSB FACT FACTOR ROUTINE ORIGIN * DEF *+3 * DEF FCT LOC OF X PLOT FACTOR * DEF FCT+1 " " Y " " * * ** ** ** ** ** ** * * * FCT OCT 0 ADDRESS OF 2 WD FP FACTOR OCT 0 FACT NOP JSB .ENTR DEF FACT-2 JSB RSFLG SET SAVE RSOURCE FLAG DEF *+1 DLD FCT,I FMP F1000 DST #CFAC X COORDINATE PLOT FACTOR. DLD FCT+1,I FMP F1000 DST #DFAC Y COORDINATE PLOT FACTOR JMP FACT,I * * * SKP *********** ******** ****** * * ***** PLOT **** * * * THE -PLOT- ROUTINE CONVERTS THE DEFINED X,Y * PARAMETERS TO PLOT INFORMATION THEN EXECUTES * THE PLOT. * * * * ** RESTRICTION--- NO PLOT LENGTH CAN EXCEED 16,383 * INCREMENTS. (APPROXIMATELY 163 INCHES) * * * - FORTRAN LINKAGE - * * CALL PLOT(X,Y,IC) * * -X,Y DEFINES THE NEW COORDINATE TO BE PLOTTED. * * -IC DEFINES THE PEN UP/DOWN COMMAND. * -2 MOVES W/PEN DOWN FINAL PEN POSITION =NEW ORIGIN. * -3 MOVES W/PEN UPWN FINAL PEN POSITION =NEW ORIGIN. * +2 MOVES W/PEN DOWN ORIGIN IS UNCHANGED. * +3 MOVES W/PEN UP ORIGIN IS UNCHANGED. * * * * * - CALLING SEQUENCE - * * JSB PLOT PLOT ROUTINE ORIGIN * DEF *+4 * DEF X ADDRESS OF X COORDINATE. * DEF Y ADDRESS OF Y COORDINATE. * DEF IC ADDRESS OF PEN COMMAND. ****** ****** * * X OCT 0 ADDRESS OF X PLOT DATA. Y OCT 0 ADDRESS OF Y PLOT DATA. IC OCT 0 ADDRESS OF PEN COMMAND. * PLOT NOP JSB .ENTR DEF PLOT-3 JSB RSFLG SET SAVE RESOURCE FLAG DEF *+1 * * DLD X,I LOAD X PLOT DATA JSB FPC CONVERT AND FACTOR STA IX STORE FIXED X #. * DLD Y,I LOAD Y PLOT DATA JSB FPD CONVERT AND FACTOR STA IY STORE FIXED Y #. * DLD #XPEN LOAD OLD X,Y PLOT DATA * * #XPEN AND #YPEN ARE IN 2 CONSECUTIVE * LOCATIONS FOR THIS DOUBLE LOAD. * * THE NEW DX,DY (IDX,IDY) WILL BE * CALCULATED AS FOLLOWS: * * IX - #XPEN= IDX * IY - #YPEN= IDY * * WHERE IX = NEW X * IY = NEW Y * #XPEN= OLD X * #YPEN= OLD Y * CMA,INA 2'S COMPLEMENT #XPEN CMB,INB 2'S COMPLEMENT #YPEN ADA IX IX - #XPEN ADB IY IY - #YPEN DST IDX STORE #XPEN,#YPEN * DLD IX SET #XPEN,#YPEN= IX,IY DST #XPEN * * AT THIS POINT #XPEN,#YPEN CONTAIN THE NEW X,Y * FOR REFERENCE AS THE "OLD" POINT FOR THE NEXT * PLOT CALL. * * * * DETERMINE PLOT MODE AND DRAW THE LINE.... * LDA IC,I GET PEN COMMAND SSA,RSS NEW ORIGIN? JMP PU.1 NO CLB YES STB #XPEN STB #YPEN CMA,INA ABSOLUTIZE PEN COMAND PU.1 CPA C01 PLOT POINTS? JMP PU.4 YES! CPA C02 MOVE WITH PEN DOWN? JMP PU.2 YES CCA MOVE WITH PEN UP STA PENC JMP PU.3 PU.4 CLA RSS PU.2 CLA,INA MOVE WITH PEN DOWN STA PENC PU.3 JSB EXEC DRAW THE LINE.... DEF *+5 DEF C02 DEF #PTLU DEF BUFR DEF C05 JMP PLOT,I * * * * THESE ROUTINES MULTIPLY THE PLOT CO-ORDINATES * BY THE SCALE FACTORS THEN CONVERTS FROM * FLOATING POINT TO FIXED. * A= X OR Y PLOT CO-ORDINATE ON ENTRY. * FPC NOP FMP #CFAC (CO-ORDINATE)(X PLOT FACTOR) FAD FD05 ADD ROUNDING VALUE JSB IFIX CONVERT TO INTEGER VALUE JMP FPC,I EXIT WITH A=FIXED PLOT #. * * * FPD NOP FMP #DFAC (CO-ORDINATE) (Y PLOT FACTOR) FAD FD05 ADD ROUNDING VALUE JSB IFIX CONVERT TO INTEGER VALUE. JMP FPD,I EXIT WITH A=FIXED PLOT NUMBER * * * * SKP *** PLTLU *** * * * THE -PLTLU- CALL ALLOWS THE USER TO SET THE * LOGICAL UNIT NUMBER FOR THE DESIRED PLOTTER. * THIS CALL MUST BE MADE TO SET THE LU # BEFORE * THE FIRST CALL TO -PLOT-; OTHERWISE THE SYSTEM * WILL TERMINATE THE USER PROGRAM BECAUSE OF AN * I/O REQUEST ERROR "LOGICAL UNIT = ZERO". * * * - FORTRAN LINKAGE - * * CALL PLTLU(ILU) * * THE LOGICAL UNIT # MUST BE INTEGER * * * - CALLING SEQUENCE : * * JSB PLTLU PLOT LU ROUTINE * DEF *+2 RETURN * DEF ILU LOCATION OF INTEGER LU # * ***** *** ***** * * * ILU NOP STORAGE FOR LU # ADDRESS * * PLTLU NOP JSB .ENTR SET ADDRESS OF DEF PLTLU-1 PARAMETER IN "ILU". JSB RSFLG SET SAVE RESOURCE FLAG DEF *+1 * LDA ILU,I SET LU # AND B77 ISOLATE LU NUMBER IOR B100 STA #PTLU IN LOCAL STORAGE JMP PLTLU,I * B77 OCT 77 SKP * * LLEFT * URITE * SFACT(X,Y) * * LLEFT MOVES PEN(IN UP POSITION) TO THE LOWER LEFT CORNER * OF THE PAPER. URITE MOVES PEN TO THE UPPER RIGHT CORNER. * SFACT SETS UP THE SCALE FACTOR SUCH THAT THE VALUES GIVEN * IN A CALL TO SFACT WILL BE INTERPRETED AS 9999 BY PLOT. * * LLEFT * LLEFT NOP JSB .ENTR DEF LLEFT JSB EXEC DEF *+5 DEF C02 DEF #PTLU DEF BUFR1 DEF C05 * JSB WHERE DEF *+3 DEF X2 DEF Y2 * JSB PLOT DEF *+4 DEF X2 DEF Y2 DEF N3 * JMP LLEFT,I * * URITE * URITE NOP JSB .ENTR DEF URITE JSB EXEC DEF *+5 DEF C02 DEF #PTLU DEF BUFR2 DEF C05 JMP URITE,I * *SFACT * X1 NOP X: WIDTH SCALE FOR HORIZONATAL MOVEMENTS Y1 NOP Y: HEIGHT SCALE FOR VERTICAL MOVEMENTS SFACT NOP JSB .ENTR DEF X1 * DLD F1000 FMP X1,I DST X2 DLD F9999 FDV X2 DST X2 DLD F1000 FMP Y1,I DST Y2 DLD F9999 FDV Y2 DST Y2 * JSB FACT DEF *+3 DEF X2 DEF Y2 * JMP SFACT,I SKP * * ****** ****** ****** * * * ****** ****** ****** * ***** WORKING STORAGE *** * * * THE FOLLOWING GROUPS OF TWO WORDS MUST BE * IN 2 CONSECUTIVE MEMORY LOCATIONS. * BUFR NOP PENC NOP DEC -1 IDX NOP IDY NOP * * IX OCT 0 ACTUAL X PLOT DATA IY OCT 0 ACTUAL Y PLOT DATA * * * * * C01 OCT 1 C02 OCT 2 C05 OCT 5 B100 OCT 100 N3 DEC -3 F1000 DEC 1000. F9999 DEC 9999. X2 NOP NOP Y2 NOP NOP #XPEN NOP #YPEN NOP #CFAC DEC 1000.0 #DFAC DEC 1000.0 #PTLU DEC 63 * BUFR1 NOP DEC -1 DEC 0 DEC 0 DEC 0 * BUFR2 NOP DEC -1 DEC 0 DEC 9999 DEC 9999 * * FD05 DEC .5 * END