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.


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.

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.


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]

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,673in 2020. [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 for subsequent Y locations 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. [6]

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, requiring 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 one vertical line after each horizontal scan. [9] At any given instant during this process, the display hardware examines 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. [lower-alpha 4] If all of these are true, a spot is drawn to present that portion of the marker. As this will be true for 16 vertical locations during the scanning process, a 16-pixel high marker will be drawn. [10]

Sold alone, the VT55 was priced at $2,496, [11] equivalent to $13,098in 2020. [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,198in 2020 [5] to the price. [12]

DEC also offered VT55 in a package with a small model of the PDP-11 to create one model of the DEClab 11/03 system. The DEClab normally sold for $14,000, equivalent to $73,467in 2020 with a DECwriter II (LA36) hard-copy terminal for $15,000, equivalent to $73,467in 2020, 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 a single stream of instructions. 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 additional data for the previous load character (command) 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 5] 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 used 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 more explicit in this regard.
  4. Which it can do quickly by examining the higher-order bits of the Y location, ignoring the lower 4 bits.
  5. 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 from Digital Equipment Corporation

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 Computer display standard and resolution

Video Graphics Array (VGA) is a video display controller and accompanying de facto graphics standard, first introduced with the IBM PS/2 line of computers in 1987, which became ubiquitous in the PC industry within three years. The term can now refer to the computer display standard, the 15-pin D-subminiature VGA connector, or the 640×480 resolution characteristic of the VGA hardware.

MOS Technology VIC-II Video microchip in the Commodore 64 and C128 home computers

The VIC-II, specifically known as the MOS Technology 6567/8562/8564, 6569/8565/8566 (PAL), is the microchip tasked with generating Y/C video signals and DRAM refresh signals in the Commodore 64 and C128 home computers.

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; at the same time, contrasted to all points addressable (APA) mode or other kinds of computer graphics modes.

Texas Instruments TMS9918 Video display controller by Texas Instruments

The TMS9918 is a video display controller (VDC) manufactured by Texas Instruments and introduced in 1979. The TMS9918 and its variants were used in the ColecoVision, 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

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 home video game 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.

Motorola 6845 Display controller

The Motorola 6845, or MC6845, was a display controller that was widely used in 8-bit computers during the 1980s. Originally intended for designs based on the Motorola 6800 CPU and given a related part number, it was more widely used alongside various other processors, and was most commonly found in machines based on the Zilog Z80 and MOS 6502.

VT52 CRT-based computer terminal

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.

Graphics BASIC is a third-party extension to the Commodore BASIC V2.0 programming language of the Commodore 64 computer. It was originally written in 1983 by Ron Gilbert and Tom McFarlane. The program was licensed to Hesware, who briefly sold the program in 1984 as part of their product line before going out of business. The program was later extended by Ken Rose and Jack Thornton, and repackaged and sold in 1985 by Epyx under the title Programmers BASIC Toolkit.

HP 2640

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.

VT420 Computer terminal from Digital Equipment Corporation

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, 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.

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.

VT320 Computer terminal from Digital Equipment Corporation

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.

Hazeltine 1500

The Hazeltine 1500 was a popular smart terminal introduced by Hazeltine Corporation in April 1977 at a price of $1,125. Using a microprocessor and semiconductor random access memory, it implemented the basic features of the earlier Hazeltine 2000 in a much smaller and less expensive system. It came to market just as the microcomputer revolution was taking off, and the 1500 was very popular among early hobbyist users.



  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 1634–1699: McCusker, J. J. (1997). How Much Is That in Real Money? A Historical Price Index for Use as a Deflator of Money Values in the Economy of the United States: Addenda et Corrigenda (PDF). American Antiquarian Society. 1700–1799: McCusker, J. J. (1992). How Much Is That in Real Money? A Historical Price Index for Use as a Deflator of Money Values in the Economy of the United States (PDF). American Antiquarian Society. 1800–present: Federal Reserve Bank of Minneapolis. "Consumer Price Index (estimate) 1800–" . Retrieved January 1, 2020.
  6. 1 2 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.