UsingThePlotter - pkimpel/retro-1620 GitHub Wiki

Using the 1627 Plotter

The IBM 1627 plotter came in two versions, Model 1 with an 11-inch carriage (actually a relabeled CALCOMP 565) and Model 2 with a 29.5-inch carriage (a relabeled CALCOMP 563). The emulator presently supports only the Model 1 version.

The physical plotter looked like this: [1]

1627 Plotter

The plotter had a carriage that mounted the pen and a pin-feed drum that moved the paper on which a plot was drawn. Plotting was accomplished by moving the carriage back and forth in the horizontal direction (generally considered to be the Y-axis of the plot) while the drum rotated up and down under the pen in the vertical direction (the X-axis). The pen moved in 0.01-inch steps at 300 steps/second.

The plotter was a fairly dumb device. It simply moved the pen one step at a time in one of eight directions relative to its current position – horizontally left and right, vertically up and down, or in either direction along the two diagonals. It had no internal coordinate system, and the 1620 had no idea where the pen was. Thus, the plotter typically required manual setup to position the pen so that it matched what the plotting software on the 1620 was expecting.

The 1620 sent commands to the plotter as single digits, 1-8 for stepping in a horizontal, vertical, or diagonal direction, 0 for pen down, and 9 for pen up. See the IBM 1627 Plotter manual for diagrams of the plotter and descriptions of its commands.

The plotter attached to the 1620 through the paper-tape punch channel. The plotter connected to the channel through the IBM 1626 control unit, which converted paper-tape codes coming from the 1620 into control signals for the plotter.

A system could have a plotter or a paper-tape punch, but not both at the same time. The emulator's configuration window enforces this restriction.

The window for the plotter in the emulator looks like this:

retro-1620 Plotter

Plotter Configuration

The plotter is not part of the default system configuration, so you will need to add it by clicking the Configure System button on the emulator's home page.

The plotter has three configuration options:

Scale determines the width of the plotter window on the screen when the emulator initializes, either 50% of full size (the default) or 100%. This setting does not affect the scale at which the plot is drawn internally, which is always one pixel per 0.01-inch plotter step. It only affects the scale at which the image is displayed on the screen. This display scale can be changed dynamically by resizing the plotter window horizontally, as discussed in the next section.

The option for 50% scale is recommended for general use. Setting the scale to 100% percent results in a window that is almost 1200 pixels wide, which could be an issue on systems with small screens. Note that if the Persistent Window Positions option is enabled in the system configuration, that option will override the scale setting, and the plotter window size and display scale will be restored to what they were the last time the emulator was used.

Max Height determines the maximum vertical size of the plotter's drawing area, or canvas. The default is 4,096 pixels (about 3.4 feet or 104cm). Values range from 2,048 pixels (20 inches or 52cm) to 32,767 pixels (27.3 feet or 832cm). 32K pixels is presently the largest value that all of the popular browsers support in common. The width of the internal canvas is always 1,100 pixels (11.0 inches or 28cm).

Note that the value of this option has a significant impact on the amount of memory the browser must allocate for its internal drawing canvas. Setting this option to one of the larger values may affect emulator performance and reduce the plotter's drawing speed, particularly with heights of 16,384 pixels or greater, but the effect varies by browser.

Carriage indicates whether the horizontal carriage that carries the pen will be visible. The carriage is visible by default, but unticking this option in the system configuration will hide the carriage parts, leaving only the pen reticle visible. You can also toggle the visibility of the carriage on the plotter window by double-clicking the PEN caption on the window's control pane.

Plot Size and Orientation

In the real plotter, the paper fed from a 120-foot roll in the upper-back of the unit, across the drum, and out the bottom. The other end of the paper was either wound around a take-up spool or fell loose below the plotter. Thus, as the plot was drawn, the paper moved downward and the area being plotted moved upward on the paper.

Alas, that orientation is opposite of the way that scrolling works for GUI windows, so in the emulator, the plotter's drawing canvas is rotated 180°, as if the plotter had been turned upside down. Therefore, as the plot is drawn, the "paper" scrolls upward and the image being plotted moves downward in the window. The left-right orientation is also reversed, so that the stepping-command digits operate thus when viewed in the plotter window:

Emulated Plotter Commands

In the internal coordinate system maintained by the emulator, the (0,0) coordinate is at the middle-right of the drawing area within the window. This is the position in which the pen is placed when the system initializes or when the HOME or CLEAR buttons described below are clicked. The X-coordinate increases from top to bottom in the window and the Y-coordinate increases from right to left. Note that 1620 software is unaware of this coordinate system and its software may use a different convention.

The red circle (termed a reticle) that moves over the canvas indicates the current location of the pen. As the plot is drawn, the reticle moves left and right, modeling the horizontal movement of the pen along its carriage. The canvas scrolls vertically, modeling the up/down rotation of the drum under the pen. The reticle is partially transparent, allowing you to see the drawing underneath it. The reticle has hairlines that help indicate the pen position and assist in manually aligning the pen.

The pen will not draw outside the boundaries of the canvas, and attempts to make it do so will simply stop the pen at the boundary it encountered. The plotter will ignore further commands to move beyond the boundary, whether programmatically from the 1620 or manually using the control panel buttons. Note that neither the 1620 nor its software are aware that the boundary has been reached. Once a command to move the pen back away from the boundary is received, the pen will move in that direction, but then the pen's actual position and the 1620 software's reckoning of the pen's position will be out of sync, and drawing may occur at a different position than the software intended.

When the plotter initializes, the current pen position is at the (0,0) coordinate at the middle-right of the drawing area in the window. The pen does not move vertically. Since the canvas is at its top, it cannot be scrolled down to align it to the pen in the middle of the window, so instead the top of the canvas is moved down to the midpoint of the window. As the pen moves downward in the plot, the top of the canvas will slide upward in the window. Once the top of the canvas reaches the top of the window, it will stop there and the canvas will begin to scroll. Once the canvas has scrolled down as far as it can with the pen in the middle of the window, the bottom of the canvas will slide upward in the window until the bottom of the canvas reaches the midpoint of the window, at which point the pen has encountered the lower boundary of the canvas and cannot go lower.

The plotter window can be resized at any time. Resizing the window vertically will change the height of the visible portion of the canvas, but will not change the scale of the display. Resizing the window horizontally will change the scale of the plot's display proportionately. The internal image of the plot does not scale – resizing horizontally simply changes the magnification of the image.

Note that at 50% scale, one plotter step equates to one-half of a pixel on the screen. Most browsers will apply anti-aliasing techniques to improve the rendering of the image. That may cause portions of drawn lines to appear in shades of gray or not at all. At exactly 50% scale, the anti-aliasing works reasonably well on most monitors. Above 75%, the anti-aliasing does not have a significant effect on the visible image. The effect varies at other scale factors, but visible image defects become significant below 50%, where plotter steps equate to less than half a pixel.

Below a scale factor of about 18%, scaling is disabled, and resizing the window smaller will simply clip the visible portion of the canvas. This affects neither the internal image being drawn nor the ability of the 1620 to continue drawing the image.

Scaling does not affect the PRINT or SAVE controls discussed in the next section – those always render the image at 100% scale, subject to any additional scaling a printer may do.

Plotter Manual Controls

Along the right side of the plotter window are a set of manual control buttons and status annunciators.

STEP – Clicking an arrow button in this section moves the pen one 0.01-inch increment. Clicking the left/right buttons moves the pen carriage one step horizontally; clicking the up/down buttons moves the canvas (i.e., the drum) under the pen one step vertically. Note that it is the canvas that moves vertically, so clicking the down button moves the plotted image upward in the window, and vice versa.

FAST – Clicking an arrow button in this section moves the pen in the indicated direction at full speed as long as the button is held down. Use these buttons to achieve a coarse positioning of the pen, then use the STEP buttons for fine adjustments.

(hh,vv) – This annunciator between the STEP and FAST buttons shows the current pen position in the plotter's internal coordinate system. hh is the horizontal position of the carriage, ranging from 0 on the right to 1099 on the left. vv is the vertical position of the canvas, ranging from 0 at the top of the canvas to the configured maximum pixel height at the bottom. The plotter will not position the pen outside of these limits. The annunciator is updated whenever the pen is moved either programmatically by the 1620 or manually by the operator.

PEN – Clicking an arrow button in this section raises or lowers the pen on the canvas, thus determining whether pen motion draws or simply moves the pen. Small white lamps below the buttons indicate the pen's current state. That state can be changed manually using the buttons or programmatically by the 1620.

Double-clicking the PEN caption above the buttons will toggle the visibility of the carriage rails and guides that carry the pen reticle. You can show or hide the carriage at any time this way, even while the plotter is operating. The final state of carriage visibility is saved in the system configuration when the emulator is powered off and will be restored the next time the emulator initializes.

PRINT – Clicking this button opens the browser's print dialog to enable printing the canvas. The window borders, window title bar, manual controls area, carriage, and reticle are not printed. The printed image will be centered horizontally on the page without any margin added, and include only that portion of the canvas where drawing occurred.

If you require additional margin, you will need to configure that in your printer driver. Most printer drivers can also scale what is being printed, and that may affect the size of the printed plot.

Using this control while the plotter is operating is not recommended, as it will freeze the emulator as long as the browser's print dialog is open. The canvas is not altered by printing it.

SAVE ‐ Clicking this button converts the canvas to a PNG image and opens a standard save-file dialog to save the image to your local system. The dialog provides a default name, which you can change before saving. The saved image will include only that portion of the canvas where drawing occurred, plus a one-pixel white border around the image. If your browser saves the image without opening a dialog, check your browser settings – there should be an option to select how downloads are to be saved.

Using this control while the plotter is operating is not recommended, as it will freeze the emulator as long as the browser's save dialog is open. The canvas is not altered by saving the image.

HOME – Clicking this button positions the pen at the (0,0) position. The pen does not step to that position – it moves there instantly – something the real plotter could not do. Any image currently drawn on the canvas is otherwise unaffected.

CLEAR – Clicking this button erases the entire canvas and repositions the pen to the (0,0) position. The emulator raises an alert first to confirm that you want to do this.

Color Selection – Below the buttons described above is a row of five colored buttons, one each for black, red, green, blue, and brown. Clicking one of these buttons changes the pen color. A white dot below the buttons indicates the currently-selected color. The color defaults to black when the emulator is initialized. Colors can be changed at any time, even while the plotter is operating. Erasing the canvas with the CLEAR button does not affect the currently-selected pen color.

The 1627 was a monochrome device. Changing the pen color required stopping the plot, disassembling the pen holder on the carriage, replacing the pen cartridge, reassembling the pen holder, and then resuming the plot. Clicking the colored buttons is simply a convenient analog to that sequence of operations. There is (and was) no way to programmatically change the color in this plotter.

LINE – Selecting a number from this drop-down list changes the pen width. Available widths range from 1 pixel (the default) to 9 pixels. The line width can be changed at any time, even while the plotter is operating. Erasing the canvas with the CLEAR button does not affect the currently-selected line width.

The internal coordinate system used by the plotter considers the (X,Y) coordinates to run between the pixels, not through them. When using the default line width of 1, the pixel immediately below and to the right of the current coordinate point is inked. When using larger line widths, a square that many pixels on a side is inked. The square is offset so that it is centered as best as possible over the current coordinate point. Even line widths will have half that number of pixels on each side of the X and Y coordinates. Odd line widths will have one more pixel below and to the right of the coordinates than above and to the left of the coordinates.

Scale Factor – At the bottom of the panel, an annunciator displays the current canvas display scaling factor as a decimal fraction, i.e., 50% shows as 0.500 and 100% shows as 1.000. Depending on the size of your monitor, factors greater than one are possible. The factor will change as the window is resized horizontally.

Double-clicking the scale factor annunciator will cause the plotter window to return to the size and position it had when the emulator initialized. This can be useful if you have moved and/or resized the plotter window and want it to revert to its original form.

Plotter Software

You can control the plotter directly in machine language or SPS by writing numerically or alphanumerically to the paper-tape punch (unit 2), e.g., in SPS:

       WNPT BUF
BUF    DSC  19,022224444666688889@

You can also use PUNCH TAPE statements in FORTRAN, but this will drive the plotter very slowly, as FORTRAN formatted paper-tape lines are always padded with spaces to a length of 87 characters. The spaces will not affect the drawing, but the time spent sending them to the plotter will slow down the pen motion.

The retro-1620 project has found and restored three utility plotting routines written in SPS that can work together: PLOT, CHAR, and POINT. Listings of these were discovered in a 1967 paper from the Kansas Geological Society. PLOT and CHAR appear to have been supplied by IBM as program number 1620-LM-042. Comments in the PLOT listing indicate that it is the "Lamont version" with some modifications to the original IBM version. The provenance of POINT is unknown.

These routines are designed to be called from FORTRAN II-D under Monitor I, although it is also possible to call them from SPS coding. The routines must be assembled and stored on disk prior to compiling a calling program. The source code for the routines is available as assembly decks in the project repository and on the project hosting site.

The retro-1620 project has developed additional plotting routines from scratch to complement the three routines above. Source code as SPS assembly decks for these routines are available in the same directories.

The following sections describe each routine.

PLOT Subroutine

PLOT is a subroutine for simple plotting of data points and drawing straight lines. With it you can define a coordinate system that will scale the data points to fit within a plot of a specified size. Optionally, the routine can draw axes with tick points or a full grid with lines at specified intervals. The routine can also control the pen's up/down state and move the pen to coordinates in the scaled coordinate system.

PLOT considers the X-axis of the plot to be along the vertical length of the canvas and the Y-axis to be horizontal across the canvas, parallel with the pen carriage. The origin is at the intersection of the axis lines (if they are drawn), i.e., at the scaled position (XMIN, YMIN) discussed below. On the first call to PLOT in a program run, the origin will be at the current pen position. On subsequent calls, that origin will be retained unless you call PLOT(8).

Drawing in PLOT's positive X-direction moves the pen down (and the canvas up) as you are viewing the plotter window. Drawing in PLOT's positive Y-direction moves the pen to the right. Thus, the origin of the plot and the initial pen position will usually need to be towards the left side of the plotter window. Thus, you may need to position the pen manually before a program begins to draw.

You call PLOT in FORTRAN as follows:

    CALL PLOT(IC, list)

where IC is an integer expression and list is a list of floating-point expressions. The value of IC determines the number of expressions that must be in list and what the values of those expressions represent:

IC = 1, 101, 201 are initialization and configuration calls. All take a list of the form XMIN, XMAX, XL, XD, YMIN, YMAX, YL, YD, where:

  • XMIN, YMIN are the minimum values to be plotted on the respective axes.
  • XMAX, YMAX are the maximum values to be plotted on the respective axes.
  • XL, YL are the lengths of the respective axes in inches.
  • XD, YD are the intervals in scaled units for tick marks or grid lines on the axes. For example, if XMIN=0.0, XMAX=15.0, and XD=1.0, the routine will place 15 ticks or grid lines along the X-axis at positions corresponding to the values 1.0, 2.0, 3.0, ... 14.0, 15.0.

The value of IC controls the type of axes that are drawn:

  • IC=1 – X and Y axes will be drawn and marked with ticks at the XD and YD intervals.
  • IC=101 – Axes and a full grid will be drawn with grid lines at the XD and YD intervals.
  • IC=201 – The routine will calculate its internal scaling according to XMIN, XMAX, XL, YMIN, YMAX, and YL, but no axes will be drawn. XD and YD must be present and positive (non-zero), but have no effect on the plot.

IC = 0, 9, 90, 98 – are pen movement and drawing calls. Each has a list with exactly two expressions defining (X,Y) coordinates in scaled units. The values of these expressions should be within the specified min/max range. PLOT does not constrain pen movement to that min/max range, however. The routine will translate its coordinate values to the appropriate 0.01-inch stepping commands, thus:

  • IC=0 – Step in a straight line to (X,Y) with the pen in its current state, draw a small +, and leave the pen down.
  • IC=9 – Step in a straight line to (X,Y) with the pen in its current state, draw a small +, and raise the pen.
  • IC=90 – Step in a straight line to (X,Y) with the pen in its current state and lower the pen. No marker is drawn at the destination point.
  • IC=98 – Raise the pen, step to (X,Y), and leave the pen up.

The remaining calls must have an empty list:

  • IC=7 – Raise the pen, move to position (XMAX + 2.5 inches, YMIN) and leave the pen up. This can be used to position the pen for a new plot with the Y axis at the same offset and the X axis 2.5 inches below the plot just completed.
  • IC=8 – Reinitialize PLOT's coordinate system at the current location of the pen, i.e., assume the current pen position is now (XMIN, YMIN).
  • IC=99 – Raise the pen; no movement takes place.

You can view and download this FORTRAN compile deck for a program that demonstrates the use of PLOT. A second demo creates a more complex drawing.

CHAR Subroutine

CHAR draws a character string that is specified by a FORTRAN FORMAT declaration. The origin of each character is at its lower-left corner when viewing the character upright, e.g., the bottom of the left leg of an "A". The first character is drawn starting at the current pen position.

The plotter will not draw outside the canvas boundaries, so when drawing text horizontally (see orientation below), make sure there is sufficient space above the starting pen position for the height of the characters to fit. Similarly, when drawing text vertically, make sure there is sufficient space to the right of the pen position for the height of the characters to fit.

After the string is drawn, the pen is raised and returns to its starting position, where it remains raised.

The FORTRAN calling sequence is:

        CALL CHAR(items, size, orientation, values...)
    nnn FORMAT(...)

where:

  • items – is an integer expression specifying the number of items in the variable-length value list. This number does not include the first three parameters, so if you simply need to write a literal text string with an H format and not include any expressions in the list, this parameter should be specified as zero.
  • size – is a floating-point expression specifying the size of the characters in inches. The characters are drawn centered within a square area of this height and width.
  • orientation – is an integer expression specifying the orientation of the text. If the value is zero, the text is drawn parallel to the X-axis (i.e., vertically along the height of the canvas – down on the window), otherwise it is drawn parallel to the Y-axis (horizontally across the window).
  • values... – is a list of zero or more expressions as they would be specified in a FORTRAN PRINT or PUNCH statement, except that no iteration of array indexes is supported. The number of items in this list must match the value of the items parameter, otherwise the routine will not return to the correct address in the caller. These expressions will be formatted according to their corresponding specifications in the FORMAT declaration.
  • nnn – is a statement label for the FORMAT declaration, which must immediately follow the CALL CHAR statement. This label is not used by CHAR, but is required by the FORTRAN compiler. Presumably some other formatted I/O statement could reference the label as well.

The characters supported by CHAR are:

CHAR Glyphs

This string was drawn by the following FORTRAN code:

      CALL PLOT(201, 0.0, 11.0, 11.0, 11.0, 0.0, 11.0, 11.0, 11.0)
      CALL CHAR(2, 0.25, 1, 11.0, 11.0)
  900 FORMAT(19HPLOTTER CHAR TEST (, 2F6.2, 2H).)
      CALL PLOT(9, 0.33, 0.0)
      CALL CHAR(0, 0.25, 1)
  901 FORMAT(49H.)+$*-/,(=@ ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789)

Note that $ is drawn as a barred-L (presumably for Pounds Sterling) and @ is drawn as ±.

The routine does not support the / phrase of a FORMAT declaration or the implicit new-line that occurs if you exhaust the FORMAT specifications when items remain in the list. A / clears the format buffer without plotting anything that was formatted before it. Running off the end of the FORMAT causes the routine to exit, ignoring any remaining items in the list.

You can view and download this FORTRAN compile deck for a program that demonstrates the use of CHAR.

POINT Subroutine

POINT draws a symbol centered on the current pen position. After the symbol is drawn, the pen is raised and returns to its original position, leaving the pen raised. The FORTRAN calling sequence is:

    CALL POINT(style, size, times, no-dot)

where:

  • style – is an integer expression interpreted as a four-digit positive value of the form aabb. The value of bb must be in the range 1 to 10 and specifies the symbol to be drawn. If aa is not zero, it must also be a value in the range 1 to 10, and specifies a second symbol that is to be drawn on top of the first one.
  • size – is a floating-point expression specifying the size of the symbol(s) in inches. Each symbol is drawn within a square area of this width and height.
  • times – is an integer expression in the range 1 to 5 that specifies the number of times the symbol is to be drawn. Values higher than 1 cause the symbol to be redrawn over itself that number of times.
  • no-dot – is an integer expression that specifies whether a small dot is to be drawn at the origin (center) of the symbol. If the low-order digit of this value is zero, a dot is drawn, otherwise no dot is drawn. Higher-order digits in the value are ignored.

The symbols available in POINT are shown below, left-to-right from 1 to 10, each with a center dot. These were drawn with a size of 0.33 inch on 0.5-inch centers:

POINT Symbols

These symbols were drawn by the following FORTRAN code:

      CALL PLOT(201, 0.0, 12.0, 12.0, 1.0, 0.0, 8.0, 8.0, 1.0)
      X = 0.50
      Y = 0.50
      DO 100 I=1,10
        CALL PLOT(98, X, Y)
        CALL POINT(I, 0.33, 1, 0)
        Y = Y + 0.5
  100   CONTINUE

You can view and download this FORTRAN compile deck for a program that demonstrates the use of POINT.

CIRCLE Subroutine

CIRCLE draws a full circle centered on the current pen position. After the circle is drawn, the pen is raised and returns to its original position, leaving the pen raised. The FORTRAN calling sequence is:

    CALL CIRCLE(radius)

where radius is a floating-point expression giving the radius of the circle in inches.

You can view and download this FORTRAN compile deck for a program that demonstrates the use of CIRCLE.

PARAB Subroutine

PARAB draws a parabola with its vertex (the "nose" of the parabola) centered on the current pen position. After the parabola is drawn, the pen is raised and returns to its original position, leaving the pen raised. The FORTRAN calling sequence is:

    CALL PARAB(xb, yb)

where:

  • xb is a floating-point expression giving the horizontal offset of the end of one of the "tails" of the parabola, i.e., the "length" of the parabola from vertex to tail.
  • yb is a floating-point expression giving the vertical offset of the end of one of the tails of the parabola, i.e., half the "width" of the parabola at the ends of its two tails.

The signs of xa and xb determine the orientation of the parabola, as follows:

  • +xb,+yb   the open end of the parabola is towards +x
  • +xb,-yb   the open end of the parabola is towards -y
  • -xb,-yb   the open end of the parabola is towards -x
  • -xb,+yb   the open end of the parabola is towards +y

These signs correspond to those used by PLOT   +x is down along the length of the paper; +y is towards the right as you are looking at the retro-1620 plotter window.

You can view and download this FORTRAN compile deck for a program that demonstrates the use of CIRCLE.

Using Other Plotting Routines with the PLOT Routine

Most of the plotting routines do not use a coordinate system. They simply draw whatever they're told to at the current pen position and return to that position when they are done. You can use PLOT to position the pen before calling the others, whether you are going to use it to plot other points or not. The demonstration programs for each of the routines show examples of this.

Note that if the first parameter to a PLOT initialization call is 201, it will set up the scaling for a coordinate system without drawing any axes. In that mode, you can use PLOT simply to move the pen around.

Programmatically Setting the Plot Origin

You can take advantage of the fact that PLOT does not constrain pen movement to the (XMIN, YMIN), (XMAX, YMAX) boundaries specified in its setup calls, plus the fact that the plotter will not position the pen outside of its internal canvas, to position the pen to a known location on the canvas. This is useful for positioning the pen to a predetermined point programmatically instead of using the plotter's manual controls.

The technique is illustrated by this example, which will position the pen 2.5 inches from the left margin and 1.0 inch down from the pen's original position:

    C                   XMIN  XMAX  XL    XD   YMIN   YMAX   YL     YD
          CALL PLOT(201, 0.0,100.0,1.0,100.0,   0.0,1100.0,11.0,1100.0)
          CALL PLOT(98, 0.0, 1100.0)
          CALL PLOT(98, 100.0, 250.0)
          CALL PLOT(8)

The PLOT(201,...) call sets up a coordinate system one inch high by 11 inches wide with 100 coordinate units per inch, thus matching the plotter's physical width and step size, i.e., one PLOT unit equals one physical plotter step. PLOT now considers the (XMIN, YMIN) origin of this coordinate system to be at the current pen position.

The PLOT(98, 0.0, 1100.0) call then moves the pen 1100 units (steps) to the right. Since the canvas is (11 inches)/(0.01 inches/step) = (1100 steps) wide and the plotter will not move the pen beyond the right margin, this guarantees that, regardless of where the pen was originally, it will be end up at the right margin of the canvas.

The PLOT(98, 100.0, 250.0) call then moves the pen to X=100, Y=250, which is 100 steps (one inch) down and 1100-250=850 steps to the left, leaving the pen 2.5 inches from the left margin.

The PLOT(8) call then resets PLOT's internal origin to be at the current pen position so that later calls will be relative to that position.

This example is written under the assumption that it will be the first use of PLOT in a program, and thus PLOT's origin will be that of the current pen location. If this will not be the first use of PLOT in the program, you may need to precede these calls by a PLOT(8) call to reset PLOT's internal origin.

__________
[1] Image from Computermuseum der Stuttgarter Informatik, Stuttgart, Germany, http://computermuseum.informatik.uni-stuttgart.de/dev/ccmp565/.

⚠️ **GitHub.com Fallback** ⚠️