# VT52

The VT50 is a CRT-based computer terminal that was 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 VT50 was sold only for a short period before it was replaced by the VT52 in September 1975. The VT52 provided a screen of 24 rows and 80 columns of text and supported all 95 ASCII characters as well as 32 graphics characters, bi-directional scrolling, and an expanded control character system. DEC produced a series of upgraded VT52s with additional hardware for various uses.
The VT52 family was followed by the much more sophisticated VT100 in 1978.

## Description

These terminals supported asynchronous communication at baud rates up to 9600 bits per second and did not require any fill characters. Like other early DEC terminals they were equipped with both an RS-232 port as well as a 20mA current loop, an older serial standard used with teletype machines that was more suitable for transmission over long runs of twisted-pair wiring. Data was read into a small buffer, which the display hardware periodically read to produce the display. Characters typed on the keyboard were likewise stored in a buffer and sent over the serial line as quickly as possible.
To interpret the commands being sent in the serial data, it used a primitive central processing unit (CPU) built from small-scale-integration integrated circuits. It examined the data while the display hardware was inactive between raster scan lines, and then triggered the display hardware to take over at the appropriate time. The display system returned control to the CPU when it completed drawing the line. The CPU was so basic that addition and subtraction could only be done by repeatedly incrementing or decrementing two registers. Moreover, the time taken by such a loop had to be nearly constant, or text lower on the screen would be displayed in the wrong place during that refresh.
Typing a character produced a noise by activating a relay. The relay was also used as a buzzer to sound the bell character, producing a sound that "has been compared to the sound of a '52 Chevy stripping its gears."
DEC also offered an optional hard-copy device called an electrolytic copier, which fit into the blank panel on the right side of the display. This device was able to print, scan-line by scan-line, an exact replica of the screen onto a damp roll of special paper. It did this by electroplating metal from an electrode into the paper. The paper ran between two electrodes. The electrode on one side was a thin straight bar oriented across the paper width. The electrode on the other side was a thin helical bar wrapped around a rotating drum. One rotation of the drum scanned an intersecting area of the electrodes across the width of the paper. While the copier did an admirable job of capturing the contents of the screen, the output of the copier had an unfortunate resemblance to wet toilet tissue. Digital patented the innovation of having a single character generator provide the text font for both screen and copier.
The basic layout of the terminal, with the screen and main keyboard on the left and the blank area on the right, was intended to allow the system to be upgraded. The printer was one such upgrade, but over time DEC offered a number of other options. The large size of the cabinet was deliberate, to avoid a cooling fan. The two circuit boards with processor and memory at the base of the terminal, and a single board with power-supply and monitor electronics at the rear, were cooled by convection. The large, flat top of the terminal frequently accommodated large volumes of DEC documentation, which could block the vents and cause overheating.

## Versions
### VT50

The VT50 was the first terminal Digital produced in this cabinet. It provided only 12 lines of text with blank lines between them to use the entire vertical area of the display. Like its predecessor, the VT05, the VT50 did not support lowercase letters. Computer users of that era seldom needed lowercase text.

### VT50H

The VT50H added a separate "auxilary keyboard" on the right side of the original keyboard. This was arranged in the fashion of a numeric keypad with additional control keys above the numbers. Four of these were cursor keys which sent ESCA through D for up, down, left and right, respectively. Another three of the keys were unlabeled and could be programmed to return any two-character code, and would default to ESCP through R.

### VT52

The VT50 was soon replaced by the greatly upgraded VT52. The VT52 had considerably larger buffers, giving it the capacity to store not only a full 24 lines of text that better utilized the screen space, but also the text off the top and bottom of the screen. This allowed the terminal to scroll backwards a limited amount without having to ask the host to re-send data. Another significant upgrade was that the VT52 included lowercase text support. Many new commands and features were added:
* Support for the :, ~ and } characters, when the shift key was used with ;, ` or {, respectively.
* Typing on the numeric keypad could now be distinguished from the main keyboard by turning on Alternate-Keypad Mode. This returned multi-character codes, ESC?n through y.
* New cursor control codes to support host-directed full-screen editing and a WYSIWYG display.
* A "graphics character set" which included several less-common characters as well as the ability to print some fractions in-line, like 3⁄7.
One notable feature was the introduction of a separate function keypad with the "Gold Key", which was used for editing programs like WPS-8, KED, and EDT. Pressing the Gold Key and then typing one of the keys on the keyboard sent a command sequence back to the host computer.

### VT55

The VT55 incorporated an add-on graphics system that was capable of displaying two mathematical functions or histograms. This was invoked by sending a command string that sent the terminal into graphics mode, with further data being sent to a separate buffer and CPU. Both systems mixed their data during the display, allowing the user to mix graphics and text on a single screen, as opposed to systems like the Tektronix 4010 or plotters that had to slowly draw text using graphics commands. This system became known as waveform graphics, and would re-appear on the later VT105.

### Block mode versions

The VT61 and VT62 were block-mode terminals. The VT62 was to be used in conjunction with TRAX, a transaction processing operating system on high-end PDP-11s. They used the same cabinet but had a more complete custom processor. Application-specific behavior was coded in separate PROM memory, using a separate instruction code that the processor interpreted. This unpublished language was to be used to easily develop additional models specific to single Digital marketing organizations. These terminals synthesized a "tock" sound on a speaker for feedback when a key was pressed instead of the relay. Though the keyboards were identical, VT6x users admired the superior "feel".

### VT78

The relatively large expansion area of the VT50 case, combined with rapidly shrinking electronics in the late 1970s, allowed DEC to produce single-box, stand-alone minicomputer/terminals similar to a contemporary microcomputer. The VT78 added a single-chip PDP-8 processor to the VT52, ran a variant of Digital's OS/8 operating system, and usually WPS-8, Digital's word processing system.

## Escape sequences

VT52 codes remained proprietary to DEC, although a number of other companies provided emulations in their terminals. Later VT series terminals supported a subset of these commands. One interesting case is the GEMDOS system and its offshoot, the TOS operating system of the Atari ST. These systems used a VT52-based screen driver in an era when ANSI escape codes had already become almost universal. This version added several new commands including the ability to select colors.

### Standard commands

VT52 commands normally consisted of the escape character and a single character following it. The exception to this rule was the Y command, which also required two numbers to be sent.
| Code | Name | Meaning | Available on |
| ESCA | Cursor up | Move cursor one line upwards. Does not cause scrolling when it reaches the top. | All |
| ESCB | Cursor down | Move cursor one line downwards. | VT50H and VT52 |
| ESCC | Cursor right | Move cursor one column to the right. | All |
| ESCD | Cursor left | Move cursor one column to the left. Same action as the BS. | VT50H and VT52 |
| ESCF | Enter graphics mode | Use special graphics character set. | VT52 |
| ESCG | Exit graphics mode | Use normal US/UK character set. | VT52 |
| ESCH | Cursor home | Move cursor to the upper left corner. | All |
| ESCI | Reverse line feed | Move cursor one line upwards. If it is already in the top line, instead scroll all content down one line. | VT52 |
| ESCJ | Clear to end of screen | Clear screen from cursor onwards. | All |
| ESCK | Clear to end of line | Clear line from cursor onwards. | All |
| ESCYrc | Set cursor position | Move cursor to position c,r, encoded as single characters. The VT50H also added the "SO" command that worked identically, providing backward compatibility with the VT05. The VT52 did not support this alternate command. | VT50H and VT52 |
| ESCZ | ident | Identify what the terminal is, see notes below. | All |
| ESC[ | Enter hold-screen mode | Stops display scrolling of the screen. Characters continue to be displayed until they reach the point where a scroll would occur, at which point the terminal sends an XOFF to the host to stop further data being sent. If the user presses the SCROLL key, an XON is sent and data is displayed until the next point where a scroll would be needed, when another XOFF will be sent. | All |
| ESC\ | Exit hold-screen mode | Turns off hold-screen mode sends an XON if needed. | All |
| ESC= | Enter alternate-keypad mode | Changes the character codes returned by the keypad. | VT52 |
| ESC> | Exit alternate-keypad mode | Changes the character codes returned by the keypad. | VT52 |

#### Cursor positioning

The ESCY code was used to position the cursor anywhere on the screen, using two parameters representing the X and Y coordinates of the cursor position, with the upper left corner of the screen being position 1,1. These numbers were sent as ASCII characters of that value, adding 31. For instance, to position the cursor at column 30 and line 20, you would add 31 to each value to get 61 and 51, then look up those ASCII characters, = and 3. The complete command would then be ESCY3= (note the row, column ordering, not X, Y). Adding 31 ensures that the characters are shifted out of the control range into the printable character range, so they will transmit properly.

#### Terminal identifier codes

The ESCZ command allowed the host computer to identify the capabilities of the terminal. There were eight possible responses.
| Model | Without printer | With printer |
| VT50 | ESC/A | (not available) |
| VT50H | ESC/H | ESC/J |
| VT52 | ESC/K | ESC/L |
| VT55 | ESC/E | ESC/E |

#### Copier codes

Several additional codes were used with the optional copier:
| Code | Name | Meaning | Available on |
| ESC] | Copy screen | Prints the current screen. | All |
| ESC^ | Enter auto-copy mode | Prints all subsequent lines. | All |
| ESC_ | Exit auto-copy mode | Stops printing. | All |

#### Graphics mode

The VT52 and VT55 included two characters sets, ASCII and "graphics mode" which switched out the lower case characters and some punctuation with new characters useful for the display of math. Unusual were glyphs for ¹⁄, ³⁄, ⁵⁄, ⁷⁄, which could be combined with subscript numbers to produce things like ⅗, and scan lines allowing a function to be plotted with 8 times higher vertical resolution than text.
VT52 Graphics Mode (gray cells are the same as ASCII) :
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| 5x | | | | | | | | | | | | | | | NBSP | NBSP |
| 6x | | █ | ¹⁄ | ³⁄ | ⁵⁄ | ⁷⁄ | ° | ± | → | … | ÷ | ↓ | ▔ | 🭶 | 🭷 | 🭸 |
| 7x | 🭹 | 🭺 | 🭻 | ▁ | ₀ | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ¶ | |

### VT52 compatibility mode

Later VT terminals supported VT52 commands, as well as adding a single new command to return to full ANSI mode.
| Code | Name | Meaning |
| ESC< | setansi | Enter/exit ANSI mode |
Compatibility mode changed the response to the ESCZ command; all models responded with the code ESC/Z.

### GEMDOS/TOS extensions

The GEMDOS version of the VT52 command set adds a number of new commands. These mostly concerned color support, with the color selection being sent as a single character using the same number-to-character encoding as the Y command. Only the last four bits of the number were used, providing support for 16 colors. The Atari ST only supported 4 of those in 80 column mode and all 16 in 40 column mode. A few new cursor commands were added as well, essentially filling out the set of the original VT52 by including commands that cleared toward the top of the screen instead of the bottom. The system did not support a number of VT52 commands, including F, G and Z.
| Code | Name | Meaning |
| ESCE | Clear screen | Clear screen and place cursor at top left corner. Essentially the same as ESCHESCJ |
| ESCb# | Foreground color | Set text colour to the selected value |
| ESCc# | Background color | Set background colour |
| ESCd | Clear to start of screen | Clear screen from the cursor up to the home position. |
| ESCe | Enable cursor | Makes the cursor visible on the screen. |
| ESCf | Disable cursor | Makes the cursor invisible. |
| ESCj | Save cursor | Saves the current position of the cursor in memory, TOS 1.02 and later. |
| ESCk | Restore cursor | Return the cursor to the settings previously saved with j. |
| ESCl | Clear line | Erase the entire line and positions the cursor on the left. |
| ESCo | Clear to start of line | Clear current line from the start to the left side to the cursor. |
| ESCp | Reverse video | Switch on inverse video text. |
| ESCq | Normal video | Switch off inverse video text. |
| ESCv | Wrap on | Enable line wrap, removing the need for CR/LF at line endings. |
| ESCw | Wrap off | Disable line wrap. |