Waveform graphics

Last updated
Waveform graphics were limited, but could still produce useful output when used in conjunction with programs like gnuplot. VT105 graph.jpg
Waveform graphics were limited, but could still produce useful output when used in conjunction with programs like gnuplot.

Waveform graphics is a simple vector graphics system introduced by Digital Equipment Corporation (DEC) on the VT55 and VT105 terminals in the mid-1970s. It was used to produce graphics output from mainframes and minicomputers. DEC used the term "waveform graphics" to refer specifically to the hardware, but it was used more generally to describe the whole system.

Vector graphics type of 2D digital illustration that uses geometric and styling definitions to represent images

Vector graphics are computer graphics images that are defined in terms of 2D points, which are connected by lines and curves to form polygons and other shapes. Each of these points has a definite position on the x- and y-axis of the work plane and determines the direction of the path; further, each path may have various properties including values for stroke color, shape, curve, thickness, and fill. Vector graphics are commonly found today in the SVG, EPS and PDF graphic file formats and are intrinsically different from the more common raster graphics file formats of JPEG, PNG, APNG, GIF, and MPEG4.

Digital Equipment Corporation (DEC), using the trademark Digital, was a major American company in the computer industry from the 1950s to the 1990s.

VT52 CRT-based computer terminal introduced by Digital Equipment Corporation (DEC) in July 1974

The VT50 was a CRT-based computer terminal introduced by Digital Equipment Corporation (DEC) in July 1974. It provided a display with 12 rows and 80 columns of upper-case text, and used an expanded set of control characters and forward-only scrolling based on the earlier VT05. DEC documentation of the era refers to the terminals as the DECscope, a name that was otherwise almost never seen.


The system was designed to use as little computer memory as possible. At any given X location it could draw two dots at given Y locations, making it suitable for producing two superimposed waveforms, line charts or histograms. Text and graphics could be mixed, and there were additional tools for drawing axes and markers.

Computer memory physical device used to store programs or data for use in a digital electronic device; computer hardware device used to store information for immediate use in a computer

In computing, memory refers to the computer hardware integrated circuits that store information for immediate use in a computer; it is synonymous with the term "primary storage". Computer memory operates at a high speed, for example random-access memory (RAM), as a distinction from storage that provides slow-to-access information but offers higher capacities. If needed, contents of the computer memory can be transferred to secondary storage; a very common way of doing this is through a memory management technique called "virtual memory". An archaic synonym for memory is store.

Waveform the shape and form of a signal such as a wave moving in a physical medium or an abstract representation

In electronics, acoustics, and related fields, the waveform of a signal is the shape of its graph as a function of time, independent of its time and magnitude scales and of any displacement in time.

Line chart chart

A line chart or line plot or line graph is a type of chart which displays information as a series of data points called 'markers' connected by straight line segments. It is a basic type of chart common in many fields. It is similar to a scatter plot except that the measurement points are ordered and joined with straight line segments. A line chart is often used to visualize a trend in data over intervals of time – a time series – thus the line is often drawn chronologically. In these cases they are known as run charts.

The waveform graphics system was used only for a short period of time before it was replaced by the more sophisticated ReGIS system, first introduced on the VT125 in 1981. [1] ReGIS allowed the construction of arbitrary vectors and other shapes. Whereas DEC normally provided a backward compatible solution in newer terminal models, they did not choose to do this when ReGIS was introduced, and waveform graphics disappeared from later terminals.

ReGIS, short for Remote Graphic Instruction Set, was a vector graphics markup language developed by Digital Equipment Corporation (DEC) for later models of their famous VT series of computer terminals. ReGIS supported rudimentary vector graphics consisting of lines, circular arcs, and similar shapes. Terminals supporting ReGIS generally allowed graphics and text to be mixed on-screen, which made construction of graphs and charts relatively easy.


Waveform graphics was introduced on the VT55 terminal in October 1975, an era when memory was extremely expensive. Although it was technically possible to produce a bitmap display using a framebuffer using technology of the era, [lower-alpha 1] the memory needed to do so at a reasonable resolution was typically beyond the price point that made it practical. All sorts of systems were used to replace computer memory with other concepts, like the storage tubes used in the Tektronix 4010 terminals, or the zero memory racing-the-beam system used in the Atari 2600. DEC chose to attack this problem through a clever use of a small buffer representing only the vertical positions on the screen. Such a system could not draw arbitrary shapes, but would allow the display of graph data. [2]

In computing, a bitmap is a mapping from some domain to bits. It is also called a bit array or bitmap index.

Framebuffer portion of RAM containing a bitmap that drives a video display

A framebuffer is a portion of RAM containing a bitmap that drives a video display. It is a memory buffer containing a complete frame of data. Modern video cards contain framebuffer circuitry in their cores. This circuitry converts an in-memory bitmap into a video signal that can be displayed on a computer monitor.

Storage tube

Storage tubes are a class of cathode-ray tubes (CRTs) that are designed to hold an image for a long period of time, typically as long as power is supplied to the tube.

The system was based on a 512 by 236 pixel display, [lower-alpha 2] producing 512 vertical columns along the X-axis, and 236 horizontal rows on the Y-axis. [lower-alpha 3] Y locations were counted up from the bottom, so the coordinate 0,0 was in the lower left, and 511, 235 in the upper right. [3] Had this been implemented using a framebuffer with each location represented by a single bit, 512 ⨉ 236 x 1 = 120,832 bits, or 15,104 bytes, would have been required. At the time, memory cost about $50 per kilobyte, [4] so the buffer alone would cost over $700, equivalent to $3,556in 2018. [5]

Instead, the waveform graphic system used one byte of memory for each X axis location, with the byte's value representing the Y location. This required only 512 bytes for each graph, a total of 1024 bytes for the two graphs. Drawing a line required the programmer to construct a series of Y locations and send them as individual points, [6] the terminal could not connect the dots itself. To make this easier, the terminal automatically incremented the X location every time an Y coordinate was received, so a graph line could be sent as a long string of numbers instead of having to repeatedly send the X location every time. Drawing normally started by sending a single instruction to set the initial X location, often 0 on the left, and then sending in data for the entire curve.

The system also included storage for up to 512 markers on both lines. These were always drawn centered on the Y value of the line they were associated with, meaning that a simple on/off indication for X locations was all that was needed, requiring only 1024 bits, or 128 bytes, in total. The markers extended 16 pixels vertically, and could only be aligned on 16-pixel boundaries, so they were not necessarily centered across the underlying graph. [7] Markers were used to indicate important points on the graph, where a symbol of some sort would normally be used. The system also allowed a vertical line to be drawn for every horizontal location and a horizontal one at every vertical location. These were also stored as simple on/off bits, adding another 128 bytes of memory. These lines were used to draw axes and scale lines, or could be used for a screen-spanning crosshair cursor. [8] A separate set of two 7-bit registers held additional information about the drawing style and other settings.

Although complex from the user's perspective, this system was easy to implement in hardware. A cathode ray tube produces a display by scanning the screen in a series of horizontal motions, moving down after each scan. [9] At any given instant during this process, the display hardware simply has to examine a few memory locations to see if anything needs to be displayed. For instance, it can determine whether to draw a marker on graph 0 by examining register 1 to see if markers are turned on, looking in the marker buffer to see if there is a 1 at the current X location, and then examining the Y location of graph 0 to see if it is within 16 pixels of the current scan line. If all of these are true, a spot is drawn to present that portion of the marker. [10]

Sold alone, the VT55 was priced at $2,496, [11] equivalent to $12,680in 2018. [5] Like other models of the VT50 series, the terminal could be equipped with an optional wet-paper printer in a panel on the right of the screen. This added $800 equivalent to $4,064in 2018 [5] to the price. [12]

DEC packaged the VT55 with a small model of the PDP-11 to create the DEClab 11/03. It sold for $14,000, equivalent to $71,124in 2018, with a printer, or $15,000, equivalent to $71,124in 2018, with the VT55. [13] The system had I/O channels for up to 15 lab devices, and included libraries for FORTRAN and BASIC for reading the data and creating graphs. The fairly extensive VT55 Programmers Manual covered the latter in depth. [14]

Commands and data

Histogram mode fills in the area under the curve. This example illustrates why the system was called waveform graphics. VT105 histogram.jpg
Histogram mode fills in the area under the curve. This example illustrates why the system was called waveform graphics.

Data was sent to the terminal using an extended set of codes similar to those introduced on the VT52. VT52 codes generally started with the ESC character (octal 33 decimal 27) and was then followed by a single letter instruction. For instance, the string of four characters ESCHESCJ would reposition the cursor in the upper left (home) and then clear the screen from that point down. These codes were basically modeless; triggered by the ESC the resulting escape mode automatically exited again when the command was complete. Escape codes could be interspersed with display text anywhere in the stream of data. [15]

In contrast, the graphics system was entirely modal, with escape sequences being sent to cause the terminal to enter or exit graph drawing mode. Data sent between these two codes were interpreted by the graphics hardware, so text and graphics could not be mixed in one stream. Graphics mode was entered by sending the string ESC1, and exited again with the string ESC2. Even the commands within the graphics mode were modal; characters were interpreted as being data for the previous load character until another load character is seen. Ten load characters were available: [16]

@ - no operation, used to tell the terminal the last command is no longer active A - load data into register 0, selecting the drawing mode for the two graphs I - load data into register 1, selecting other drawing options H - load the starting X position (Horizontal) for the following commands B - load data for Y locations for graph 0 starting at the H position selected earlier J - load data for Y locations for graph 1 starting at the H position selected earlier C - store a marker on graph 0 at the following X location K - store a marker on graph 1 at the following X location D - draw a horizontal line at the given Y location L - draw a vertical line at the given X location

X and Y locations were sent as 10-bit decimal numbers, encoded as ASCII characters, with 5 bits per character. This means that any number within the 1024 number space (210) can be stored as a string of two characters. To ensure the characters can be transmitted over 7-bit links, the pattern 01 is placed in front of both 5-bit numbers, producing 7-bit ASCII values that are always within the printable range. This results in a somewhat complex encoding algorithm. [17]

For instance, if one wanted to encode the decimal value 102, first you convert that to the 10-bit decimal pattern 0010010010. That is then split that into upper and lower 5-bit parts, 00100 and 10010. Then append 01 binary to produce 7-bit numbers 0100100 and 0110010. Individually convert back to decimal 40 and 50, and then look up those characters in an ASCII chart, finding ( and 2. These have to be sent to the terminal least significant character first. If these were being used to set the X coordinate, the complete string would be H2(. When used as X and Y locations for the graphs, extra digits were ignored. For instance, the 512 pixel X axis requires only 9 bits to encode, so the 10th bit was ignored. Likewise, Y locations ignored the 9th and 10th bits. [18]

Control registers always contained 7 bits, with the most significant bits always being 01. [19] In register zero, bit 0 (least significant) turned the entire line drawing system on or off. Bits 1 and 2 turned the individual graphs 0 or 1 on or off, and bits 3 and 4 controlled whether graphs 0 and 1 were lines or filled in to make histograms. For instance, if one wanted to have both graphs on-screen, but graph 0 would be a histogram and graph 1 would be a line, the required bit pattern would be 0101111, the leading 01 being fixed, the next bit saying graph 1 is a line (0), the next that graph 0 is a histogram (1), that both graphs are on (11) and that the entire graphics system is enabled (1). The resulting pattern is equivalent to decimal 47, the / character. This mode would be enabled with the string A/.

The I register was loaded using similar encoding, but the bits controlled the display of markers and the horizontal and vertical lines. As with A, the most significant bits were always 01, the least significant bit turned on or off horizontal lines, bit 1 the same for vertical, 2 and 3 whether or not to display markers on graph 0 or 1 respectively, and setting bit 5 would clear out all the data for the markers and lines. That meant that one could clear the display by sending the bit pattern 0110000, decimal 48, the character 0. This produces the easily readable command I0. [20]

Markers and lines required only one coordinate to be sent, an X or Y. In the case of a marker, the Y location was defined by the data previously set with B or J. For lines, the second coordinate spanned the screen. For instance, a vertical line could be placed at location 102 on the X axis with the string L2(. Both markers and lines could be cleared by setting bit 5 of the third character, which would otherwise be unused. [18]


The following example produces a simple graphic: [21]

ESC1A'I?B1111111111111111H (J6666666666666666C$09K$8D+723L 0?? 8

The first two characters tell the terminal to enter graphics mode, while the next four set the two drawing mode registers to turn on both graph lines, markers on both, and enables horizontal and vertical lines. The B followed by the string of 1's produces an 8-pixel horizontal line in the lower left of the screen drawn using graph 0. The X location starts at the default location 0, and moves over one location with every following data point, which always consists of two characters. There is no need to type B in again, the string is modal and the current command remains B until another is encountered. [21]

That occurs when the H is encountered, and the following two characters are used to move the starting X location to the center of the screen. This is followed by a second line segment being drawn in graph 1 using the J. Two markers are then added, one on each line, centered along the segments. The line segments are 16 pixels wide and the markers are always 16 high. The result are cross shapes, one in the lower left and another centered. As the markers are centered on 16-pixel boundaries and cannot be drawn outside the visible area, the first marker on the lower segment will appear above the line, creating an upside-down T shape rather than a cross. The last two commands, D and L, produce two horizontal lines at the bottom and center of the screen, and three vertical lines at the left, center and right. [21]

At this point the terminal is still in graph drawing mode. One could turn graph 1 into a histogram by sending A7, causing a vertical bar to be drawn extending down from the center of the screen. Sending ESC2 would exit graphics mode, at which point further characters are interpreted as normal text. [21]

VT105 changes

The VT105 was broadly similar to the VT55, but added a number of additional features. One was a square format mode that reduced the display horizontally by eight character widths and extended it vertically by one line to make it more square than the original layout. This left additional room on the left for eight characters instead of a single vertical column, improving label displays. [22] The VT105 also changed the meaning of register 0's bits slightly; bit 1 and 2 no longer turned on and off the entire graph, but the display of the graph points themselves. This allowed the display to make a line, a shaded histogram, or a histogram with a brighter line on top. [23] In comparison, on the VT55 the graph bit controlled the display of the entire dataset, not just the line itself, so turning off the graph bit would make the histogram disappear as well.

Another change was to re-use the @ command, formerly the noop, to allow a new Y position to be sent in as the shade line. This worked in conjunction with the histogram to allow the direction of the filling to be changed. On the VT55 the filling always drew down from the graph to the base of the display, on the VT105 with the shade line set, this could be set to draw up to the top of the screen, or more commonly, towards a center-point in the data. For instance, with the shade line set to the middle of the screen, if a sine wave was plotted the areas above the center would be shaded downwards and the sections below center upwards, producing a filled-in waveform. Enabling a horizontal line at the same point adds a visual baseline. [24] There were two shade lines in memory, one for each graph, but only one @ command. A bit in register 1 controlled which of the two buffers the @ data was loaded into. [25]

Another major addition was the concept of strip graphs, a mode that emulated paper pen plotters that moved up and down while the paper was wound under them. These were commonly used for recording scientific data, but are perhaps best known on older lie detectors. As new data points were added to one of the graphs, previous data was shifted to the left. Thus, sending a series of Y values using B or J would first cause the line to be drawn from the left to right like the VT55, but additional data points would push the previous data to the left. [26] If markers or vertical axis lines were set, they too were pushed over, following the data. [27] In dual strip mode, adding data to graph 1 caused both graphs to move over at the same time. [26]

All of these new features were controlled through optional second characters added to the A and I commands. The first data character worked as it had under the VT55, and thus provided backward compatibility. [lower-alpha 4] The second turned on the new features. The second character sent to the A controlled shading lines and the strip-chart feature; least significant bit, bit 0, set the shade line data sent with @ to be loaded into graph 0 or graph 1, while bits 2 and 3 turned the shade line on or off for graph 0 or 1, respectively. Turning on bit 3 allowed strip charts to be used, while bit 4 turned it on for both graphs, the dual strip feature. The second character on the I command had only two values, ! or space; sending ! put the terminal into square mode, while space, or nothing, left it in the VT55 compatible rectangle format. [25]

Other details

The VT50 series also included an alternate character set, graphics mode, that could be switched in and out while in text mode. These were used to provide additional glyphs useful for labeling and similar tasks. Among the characters were subscript 0 through 9 and the upper part of fractions 1/, 2/, 3/, 5/ and 7/. These could be combined to form, for instance, 37. The set also included horizontal bars at each of the 8 scan lines in a normal glyph, the degree symbol, and other common examples. These uses separate character codes, so graphics characters could be mixed with the normal character set on a single screen. [28]


  1. The Cromemco Dazzler is a contemporary example.
  2. 230 or 240 lines on the VT105.
  3. The VT55 documentation prints everything in octal, so the resolution is 1000 by 354 in that notation. This can make conversions and comparisons difficult, and which system is being used is not always indicated. The VT105 documentation is much better in this regard.
  4. With the exception of the change to register 0, noted earlier.

Related Research Articles

Original Chip Set

The Original Chip Set (OCS) is a chipset used in the earliest Commodore Amiga computers and defined the Amiga's graphics and sound capabilities. It was succeeded by the slightly improved Enhanced Chip Set (ECS) and greatly improved Advanced Graphics Architecture (AGA).

VT100 computer terminal

The VT100 is a video terminal, introduced in August 1978 by Digital Equipment Corporation (DEC). It was one of the first terminals to support ANSI escape codes for cursor control and other tasks, and added a number of extended codes for special features like controlling the status lights on the keyboard. This led to rapid uptake of the ANSI standard, becoming the de facto standard for terminal emulators.

Video Graphics Array analog computer display standard and a display resolution

Video Graphics Array (VGA) is a graphics standard for video display controller first introduced with the IBM PS/2 line of computers in 1987, following CGA and EGA introduced in earlier IBM personal computers. Through widespread adoption, the term has also come to mean either an analog computer display standard, the 15-pin D-subminiature VGA connector, or the 640×480 resolution characteristic of the VGA hardware.

Hercules Graphics Card

The Hercules Graphics Card (HGC) is a computer graphics controller made by Hercules Computer Technology, Inc. that combines IBM's text-only MDA display standard with a bitmapped graphics mode. This allows the HGC to offer both high-quality text and graphics from a single card. The HGC was very popular, and became a widely supported de facto display standard on IBM PC compatibles connected to a monochrome monitor. The HGC standard was used long after more technically capable systems had entered the market, especially on dual-monitor setups.

Computer terminal computer input/output device; an electronic or electromechanical hardware device that is used for entering data into, and displaying data from, a computer or a computing system

A computer terminal is an electronic or electromechanical hardware device that is used for entering data into, and displaying or printing data from, a computer or a computing system. The teletype was an example of an early day hardcopy terminal, and predated the use of a computer screen by decades.

Commodore 64 demos

The Commodore 64 (C64) demos are demonstrations of what can be done to push the limits of the Commodore 64 computer, made by programmers, musicians and artists.

Color Graphics Adapter computer display standard

The Color Graphics Adapter (CGA), originally also called the Color/Graphics Adapter or IBM Color/Graphics Monitor Adapter, introduced in 1981, was IBM's first graphics card and first color display card for the IBM PC. For this reason, it also became that computer's first color computer display standard.

Text mode is a computer display mode in which content is internally represented on a computer screen in terms of characters rather than individual pixels. Typically, the screen consists of a uniform rectangular grid of character cells, each of which contains one of the characters of a character set. Text mode is contrasted to all points addressable (APA) mode or other kinds of computer graphics modes.

Texas Instruments TMS9918

The TMS9918 is a Video Display Controller (VDC) manufactured by Texas Instruments, introduced in 1979. The TMS9918 and its variants were used in the ColecoVision and CreatiVision, Memotech MTX, MSX, SG-1000/SC-3000, Spectravideo, Sord M5, Tatung Einstein, Texas Instruments TI-99/4, Casio PV-2000, and Tomy Tutor.


Alphanumeric Television Interface Controller (ANTIC) is an LSI ASIC dedicated to generating 2D computer graphics to be shown on a television screen or computer display. Under the direction of Jay Miner, the chip was designed in 1977-1978 by Joe Decuir, Francois Michel, and Steve Smith for the Atari 8-bit family of home computers first released in 1979 and was patented by Atari, Inc. in 1981. ANTIC is also used in the Atari 5200 video game system released in 1982, which shares most of the same hardware as the 8-bit computers.

Tektronix 4010 text and graphics computer terminals developed by Tektronix

The Tektronix 4010 series was a family of text-and-graphics computer terminals based on storage-tube technology created by Tektronix. Several members of the family were introduced during the 1970s, the best known being the 11-inch 4010 and 19-inch 4014, along with the less popular 25-inch 4016. They were widely used in the computer-aided design market in the 1970s and early 1980s.


Color Television Interface Adaptor (CTIA) and its successor Graphic Television Interface Adaptor (GTIA) are custom chips used in the Atari 8-bit family of computers and in the Atari 5200 console. In these systems, a CTIA or GTIA chip works together with ANTIC to produce the video display. ANTIC generates the playfield graphics while CTIA/GTIA provides the color for the playfield and adds overlay objects known as player/missile graphics (sprites). Under the direction of Jay Miner, the CTIA/GTIA chips were designed by George McLeod with technical assistance of Steve Smith.

HP 2640 block-mode serial terminals produced by Hewlett-Packard using the Intel 8008 and 8080 microprocessors

The HP 2640A and other HP 264X models were block-mode "smart" and intelligent ASCII standard serial terminals produced by Hewlett-Packard using the Intel 8008 and 8080 microprocessors.


The VT420 was an ANSI standard computer terminal introduced in 1990 by Digital Equipment Corporation (DEC). The 420 was the only model in the 400 series, replacing the VT320. There were no color or graphics-capable 400 series terminals; the VT340 remained in production for those requiring ReGIS and Sixel graphics and color support. The entire lineup of VT300s and VT420 was eventually replaced by the relatively unknown VT500 series starting in 1993.

Sixel DEC created six pixel vertical format element that can be used to create pictures on printing or terminal screens

Sixel, short for "six pixels", is a bitmap graphics format supported by terminals and printers from DEC. It consists of a pattern six pixels high and one wide, resulting in 64 possible patterns. Each possible pattern is assigned an ASCII character, making the sixels easy to transmit on 7-bit serial links.

The Apple II graphics were composed of idiosyncratic modes and settings that could be exploited. This graphics system debuted on the original Apple II, continued with the Apple II Plus and was carried forward and expanded with the Apple IIe, Enhanced IIe, IIc, IIc Plus and IIGS.


The VT320 was an ANSI standard computer terminal introduced by Digital Equipment Corporation (DEC) in 1987. The VT320 was the text-only version, while the VT330 added monochrome ReGIS, Sixel and Tektronix 4010 graphics, and the VT340 added color.



  1. "Enhancements Give DEC Minc Graphics, Floating-Point Unit". Computerworld: 47. August 1981.
  2. VT55 1976, p. 5-11.
  3. VT105 1979, p. 3-7.
  4. "Memory Prices (1957-2014)"
  5. 1 2 3 Federal Reserve Bank of Minneapolis Community Development Project. "Consumer Price Index (estimate) 1800–". Federal Reserve Bank of Minneapolis. Retrieved January 2, 2019.
  6. VT105 1979, p. 3-17.
  7. VT105 1979, p. 3-1.
  8. VT105 1979, p. 3-4.
  9. VT55 1976, p. 4-1.
  10. VT55 1976, p. 4-2.
  11. "Digital's VT55 Graphics Terminal reaches new heights". Computerworld: 26. 19 November 1975.
  12. "Hard Copy Optional On DEC Graphics Unit". Computerworld: 31. 15 October 1975.
  13. "System Links to 15 Lab Tools". Computerworld: 56. 23 May 1977.
  14. VT55 Programmer's Manual (PDF). Digital. February 1977.
  15. VT55 1976, p. 4-3.
  16. VT55 1976, p. 5-14.
  17. VT55 1976, p. 5-17.
  18. 1 2 VT55 1976, p. 5-27.
  19. VT55 1976, p. 5-24.
  20. VT55 1976, p. 5-25.
  21. 1 2 3 4 VT55 1976, p. 5-29.
  22. VT105 1979, p. 3-86.
  23. VT105 1979, p. 3-10.
  24. VT105 1979, p. 3-20.
  25. 1 2 VT105 1979, p. 3-8.
  26. 1 2 VT105 1979, p. 3-25.
  27. VT105 1979, p. 3-5.
  28. VT55 1976, p. 5-10.